2013-05-11 81 views
1

正则表达式noob听到。通过PHP和preg_replace() ...PHP - Regex。用下划线替换引号中的所有空格?

我试图做到这一点。

id="New York State" 

进入此。

id="New_York_State" 

但不是这样。

id="New_York_State"_class="United_States" 


我所有的尝试都很糟糕!
我已经阅读了几篇教程,但我仍然在用正确的语法制定有用的模式时遇到了很多麻烦。

请给我们一个解释正则表达式的答案!另外,如果你觉得它,任何链接 PHP的正则表达式教程或文章将不胜感激。谢谢!

+0

向我们展示您的尝试。也许你正在走上好的道路。 – 2013-05-11 21:00:32

+0

你正在做一个完整的HTML文件的替代? – Baba 2013-05-11 21:00:56

+0

我认为最好的方法是使用DOM,检查所有的类和id,并做空间替换。 – HamZa 2013-05-11 21:01:31

回答

3

非常解决方案:

$string = 'blabla id="New_York_State" class="United_States" blabla'; 

$new_string = preg_replace_callback('#\"([^"]*)\"#', function($m){ 
    return('"'. str_replace(' ', '_', $m[1]) .'"'); 
}, $string); 
echo $new_string; 

输出:

blabla id="New_York_State" class="United_States" blabla 

只允许id=class=双引号后面:

$string = 'blabla id="New_York_State" class="United_States" blabla "this won\'t get underscored" yaaaay'; 

$new_string = preg_replace_callback('#(?<=id=|class=)\"([^"]*)\"#', function($m){ 
    return('"'. str_replace(' ', '_', $m[1]) .'"'); 
}, $string); 
echo $new_string; 

输出:

blabla id="New_York_State" class="United_States" blabla "this won't get underscored" yaaaay

+1

甜!谢谢! – Terry 2013-05-11 21:21:12

+0

不客气,但我希望你会使用DOM :) – HamZa 2013-05-11 21:23:30

+0

为了告诉你实话,我不知道如何通过使用PHP的DOM来做到这一点。目前,我一直在将''加载到浏览器中,并使用JavaScript进行适用更改,并通过萤火虫将''复制到文本编辑器O_o(眼睛抽搐) – Terry 2013-05-11 21:26:25

0

有一个函数叫做str_replace

您的代码将是这样的:

的$ id = str_replace函数(””, “_”,$ ID); 或更好$ id = str_replace(“纽约州”,“New_York_State”,$ id);

来源:http://php.net/manual/en/function.str-replace.php

+1

其实这个信息是真实的,但它没有回答这个问题。 – HamZa 2013-05-11 21:02:51

+1

这将取代* all *空格,而不仅仅是'id'属性中的那些空格。 – 2013-05-11 21:02:52

+0

如果您将它与DOM一起使用,为什么不呢。 – 2013-05-11 21:04:20

4

使用SimpleXMLElement

header('Content-Type:text/plain'); 
$xml = simplexml_load_file('log.svg', "SimpleXMLElement"); 
recursiveReplace($xml); 
echo $xml->asXML(); 

功能用于

function recursiveReplace(&$xml) { 
    foreach($xml as $k => $value) { 
     foreach($xml->attributes() as $n => $d) { 
      $xml[$n] = preg_replace('/\s+/', '_', $d); 
     } 
     recursiveReplace($value); 
    } 
} 
+1

正在等待规范的答案:D – HamZa 2013-05-11 21:51:48

+0

@Baba这看起来像一个非常优雅和平易近人的解决方案。我正在研究一个WAMP环境,似乎我需要安装一些库才能使用SimpleXMLElement扩展。不是一个问题,但我真的只是寻找一个正则表达式模式。仍然超级有用,谢谢。真的很感激它! – Terry 2013-05-11 21:53:02

相关问题