PHP - 正则表达式。用下划线替换引号中的任何空格?

时间:2013-05-11 20:57:41

标签: php regex

正则表达式noob听到。通过PHP和preg_replace() ...

我正在努力做到这一点。

id="New York State"

进入这个。

id="New_York_State"

但不是这个。

id="New_York_State"_class="United_States"

我所有的尝试都很糟糕! 我已经阅读了几个教程,但是我仍然在使用正确的语法制定有用的模式时遇到很多麻烦。
请拜托,请用你的答案包含正则表达式的说明!此外,如果您对此感到满意,那么非常感谢任何指向好的 PHP正则表达式教程或文章的链接。谢谢!

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:0)

有一个名为str_replace的函数。

您的代码将是这样的:

$ id = str_replace(“”,“_”,$ id); 或者更好$ id = str_replace(“纽约州”,“New_York_State”,$ id);

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