preg_replace 对于 "Virginia" 和 "West Virginia"

preg_replace for "Virginia" and "West Virginia"

我正在编写一个脚本来将 XML 提要转换为 HTML。例程的一部分涉及将原始状态名称转换为具有 preg_replace 的链接。它大部分工作正常,但我在使用 "Virginia" 和 "West Virginia."

时遇到问题
<?php

$state_patterns = array(
    '/\balabama\b/i',
    '/\balaska\b/i',
    '/\barizona\b/i',
    '.....etc.....',
    '/\bvirginia\b/i',
    '/west virginia/i'
);

$state_replacements = array(
    '<a href="/path/to/alabama">Alabama</a>',
    '<a href="/path/to/alaska">Alaska</a>',
    '<a href="/path/to/arizona">Arizona</a>',
    '.....etc.....',
    '<a href="/path/to/virginia">Virginia</a>',
    '<a href="/path/to/west-virginia">West Virginia</a>'
);

$statelinks = preg_replace($state_patterns, $state_replacements, $xml_src);

当然,这个问题是"Virginia"打破了"West Virginia"。 "Mexico" 和 "New Mexico."

之类的东西也会发生同样的破损

我可以使用什么 preg_replace 模式来克服这种冲突?

我先试了运行 "West Virginia",然后再试了"Virginia"。但这也有问题——只是方式略有不同。

您可以对弗吉尼亚正则表达式使用负向后视。这将匹配 "virginia" 但不匹配 "west virginia"

\b(?<!west\s)virginia\b