2013-07-07 59 views
0

是否可以使用preg_match在PHP中創建未被模式Y包含的模式X的正則表達式?正則表達式:匹配所有出現的X不被Y所包圍

例如,考慮這個字符串:

hello, i said <a>hello</a> 

我想要的第一聲問候,但不是第二相匹配的正則表達式...我想不出任何痕跡查找

+0

您使用的是哪種正則表達式引擎?你有沒有想過使用否定字符,如'[^ ...]'? – Jerry

+0

@Jerry它實際上是php的preg_match –

回答

1

使用負的樣子:

(?<!<a>)hello 
+0

+負向預測;) – sp00m

0

說明

假設你的使用情況是多一點補償lex then hello, i said <a>hello</a>;那麼,如果你在哪裏尋找hello, i said <a>after arriving say hello</a>所有hello你可能只想捕捉到好的和壞的,然後使用一些編程邏輯只處理您感興趣的比賽。

這個表達式將捕獲所有<a>...</a>子字符串和所有hello字符串。由於不期望的子串匹配的第一,如果期望的子串內出現那麼它永遠不會被包括在捕獲組1

<a>.*?<\/a>|\b(hello)\b

enter image description here

直播例如:http://ideone.com/jpcqSR

示例文本

Chello said Hello, i said <a>after arriving say hello</a> 

代碼

$string = 'Chello said Hello, i said <a>after arriving say hello</a>'; 
$regex = '/<a>.*?<\/a>|\b(hello)\b/ims'; 

preg_match_all($regex, $string, $matches); 

foreach($matches as $key=>$value){ 
    if ($value[1]) { 
     echo $key . "=" . $value[0]; 
    } 
     } 

輸出

注意在招呼上殼體H表明,它是所需的子串。

0=Hello 
相關問題