我需要什么样的正则表达式?

Ape*_*tus 0 php regex

我需要一个正则表达式(用PHP工作)用英式英语单词替换HTML中的美式英语单词.因此,颜色将被颜色取代,以米为单位等等[我知道米也是英国英语单词,但对于副本我们将使用它将始终指的是距离单位而不是测量设备].该模式需要在以下(略微设计的)示例中准确工作(尽管由于我无法控制实际输入,因此可能存在):

<span style="color:red">This is the color red</span>
Run Code Online (Sandbox Code Playgroud)

[不应该替换HTML标记中的颜色,但应该在句子中替换它]

<p>Color: red</p>
Run Code Online (Sandbox Code Playgroud)

[应该替换字]

<p>Tony Brammeter lives 2000 meters from his sister</p>
Run Code Online (Sandbox Code Playgroud)

[应该替换单词的米而不是名称]

我知道有一些边缘情况,替换不会有用(例如,如果他的名字是Tony Meter),但这些很少见,我们可以在他们出现时处理它们.

sou*_*rge 5

HTML/XML不应该使用正则表达式来处理,这是真的很难产生一个将匹配任何东西.但是你可以使用内置的dom扩展并递归处理你的字符串:

# Warning: untested code!
function process($node, $replaceRules) {
    foreach ($node->children as $childNode) {
        if ($childNode instanceof DOMTextNode) {
            $text = pre_replace(
                array_keys(replaceRules),
                array_values($replaceRules),
                $childNode->wholeText
            );
            $node->replaceChild($childNode, new DOMTextNode($text));
        } else {
            process($childNode, $replaceRules);
        }
    }
}
$replaceRules = array(
    '/\bcolor\b/i' => 'colour',
    '/\bmeter\b/i' => 'metre',
);
$doc = new DOMDocument();
$doc->loadHtml($htmlString);
process($doc, $replaceRules);
$htmlString = $doc->saveHTML();
Run Code Online (Sandbox Code Playgroud)