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
我正在编写一个脚本来将 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