2017-06-10 22 views
2

我有以下表現:做一個負向前查找不區分大小寫

$exp = "/^(?!.*?that).*$/"; 

這是爲了匹配不包含「」任何線。

我有以下三個句子:

$str = array( 
    "I like this sentence.", #line1 
    "I like that sentence.", #line2 
    "I link THAT sentence." #line3 
); 

匹配是大小寫敏感的,因此僅線1和3是匹配的。到現在爲止還挺好。

不過,我想,使其不區分大小寫的,所以它僅匹配線1.我有一個內嵌修改,即「(-i ...?)」的嘗試:

$exp = "/^(?!.*?(?i:that)).*$/"; 

,並作爲一個標誌,即 「/ ...... /我」:

$exp = "/^(?!.*?that).*$/i"; 

,但無濟於事。

我運行下面的循環搜索:

foreach($str as $s) { 
    preg_match_all($exp, $s, $matches); 
    var_dump($matches); 
} 

與輸出:

array (size=1) 
    0 => 
    array (size=1) 
     0 => string 'I like this sentence.' (length=21) 
array (size=1) 
    0 => 
    array (size=0) 
     empty 
array (size=1) 
    0 => 
    array (size=1) 
     0 => string 'I link THAT sentence.' (length=21) 

和在線演示,請訪問:https://regex101.com/r/bs9rzF/1

我會感謝任何提示我如何使我的正則表達式不區分大小寫。

編輯:我錯誤地使用「?-i」而不是「?-i」,正如一些貢獻者正確指出的那樣。現在修復。

+1

'$ exp =「/^(?!.*?that)。* $/i」;'是正確的,應該工作。但是'(?-i:...'關掉了我的修飾符。要打開它:'(?i:...' –

+1

第二次嘗試使用'$ exp =「/^(?!.*?that )。* $/i「;'[**應該工作。**](https://3v4l.org/sEXhn) – revo

+0

的確,看起來這個問題使搜索區分大小寫而不管我的修飾符是在什麼地方否則:u標誌對於帶有口音和其他字母的語言也是必需的,即''/^(?!.*?that)。* $/ui「'感謝您的快速回答! – msoutopico

回答

2

您的第一個正則表達式^(?!.*?that).*$與區分大小寫無關,因爲您不區分大小寫不使用任何修飾符。

正則表達式匹配的第一和第三句,因爲你的正則表達式是說有應該在句子中,這是第一和第三句真字that區分大小寫這裏)(在第三句你有THAT這是不一樣的

只匹配了第一句話,你可以使用內聯修改(?i)

(?i)^(?!.*?that).*$ 

here

順便說一句,你的正則表達式/^(?!.*?that).*$/i也是正確的。

2

你接近:

^(?!.*?(?i)that).*$ 

a demo on regex101.com。在你的表情((?-i))中,你正在將修改器關閉