我寫在PHP中的正則表達式,將需要從字符串看起來像提取日期:「可選」串匹配與正則表達式
新塞勒姆,北達科他州
美國(中心,北達科他州)
我想提取:
新塞勒姆
中心
對於第一種情況,我已經寫了[^-]*(?=,)
,這工作得很好。我想修改表達式所以,如果有(and)
括號,它不應該那些括號之間搜索,然後提取逗號之前的一切。
是否有可能做這樣的事情只有1個表達?如果是這樣,我怎樣才能讓它在括號內進行搜索如果真的存在?
我寫在PHP中的正則表達式,將需要從字符串看起來像提取日期:「可選」串匹配與正則表達式
新塞勒姆,北達科他州
美國(中心,北達科他州)
我想提取:
新塞勒姆
中心
對於第一種情況,我已經寫了[^-]*(?=,)
,這工作得很好。我想修改表達式所以,如果有(and)
括號,它不應該那些括號之間搜索,然後提取逗號之前的一切。
是否有可能做這樣的事情只有1個表達?如果是這樣,我怎樣才能讓它在括號內進行搜索如果真的存在?
我覺得這個人能做到這一點:
[^-(]+(?=,)
這是一樣的您正則表達式,但它不允許匹配的字符串的括號內。它仍然匹配的第一個主題,並在第二個它只會在左括號後匹配。
你可以使用
[^(),]+(?=,)
這將匹配除逗號或圓括號的任何文本,跟一個逗號。
一個conditional可能會幫助你在這裏:
$stra = 'Naujasis Salemas, Šiaurės Dakota';
$strb = 'Jungtinės Valstijos (Centras, Šiaurės Dakota)';
$regex = '
/^ # Anchor at start of string.
(?(?=.*\(.+,.*\)) # Condition to check for: presence of text in parenthesis.
.*\(([^,]+) # If condition matches, match inside parenthesis to first comma.
| ([^,]+) # Else match start of string to first comma.
)
/x
';
preg_match($regex, $stra, $matches) and print_r($matches);
/*
Array
(
[0] => Naujasis Salemas
[1] =>
[2] => Naujasis Salemas
)
*/
preg_match($regex, $strb, $matches) and print_r($matches);
/*
Array
(
[0] => Jungtinės Valstijos (Centras
[1] => Centras
)
*/
注意那略高於$matches
變化的指數,但你可能不能夠使用若要解決named subpatterns。
尼斯:) :)(你可以使用['x'修飾符(http://docs.php.net/manual/en/reference.pcre.pattern.modifiers.php)在正則表達式發表評論直接;)), – arnaud576875
啊,謝謝!我敢發誓我看到了正則表達式評論別的地方的SO,它被竊聽我,我不能讓它爲我工作(: – 2011-09-17 17:02:42
謝謝!這工作完全 – F21