2017-05-17 1 views
0

Ich schreibe ein Skript, um einen XML-Feed in HTML zu konvertieren. Ein Teil der Routine beinhaltet die Umwandlung von Rohzustandsnamen in Verbindungen mit preg_replace. Es funktioniert meistens gut, aber ich habe Probleme mit "Virginia" und "West Virginia".preg_replace für "Virginia" und "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); 

Natürlich ist das Problem mit diesem "Virginia" bricht "West Virginia". Der gleiche Bruch würde für Dinge wie "Mexiko" und "New Mexico" auftreten.

Welche Preg_replace-Muster könnte ich verwenden, um diesen Konflikt zu überwinden?

Ich habe versucht, zuerst "West Virginia" und dann "Virginia" zu laufen. Aber das bricht auch - nur etwas anders.

Antwort

2

Sie können einen negativen Lookbehind für den virginia Regex verwenden. Dies entspricht "Virginia", aber nicht "West Virginia"

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

Das scheint perfekt für meine Situation zu arbeiten. Tief danke Mann. –