1

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

我正在努力做到这一点。

id="New York State"

入此。

id="New_York_State"

但不是这个。

id="New_York_State"_class="United_States"


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

请,请,请在您的答案中包含对正则表达式模式的解释!此外,如果您愿意,任何指向优秀PHP 正则表达式教程或文章的链接都将不胜感激。谢谢!

4

3 回答 3

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);
    }
}
于 2013-05-11T21:37:57.857 回答
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

于 2013-05-11T21:08:27.770 回答
0

有一个函数叫做str_replace.

您的代码将如下所示:

$id = str_replace(" ", "_", $id); 或更好 $id = str_replace("New York State", "New_York_State", $id);

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

于 2013-05-11T21:00:35.620 回答