2017-01-08 81 views
3

這裏是我的字符串:如果它不包含特定單詞,我該如何匹配它?

$str = "this is a string 
     this is a test string"; 

我想匹配的一切this與字之間string(加上本身)

注意:這兩個詞之間可以是除了test之外的所有詞。

所以我試圖匹配this is a string,但不是this is a test string。因爲第二個包含test這個詞。


這是我目前的格局:

/this[^test]+string/gm 

But it doesn't work as expected

我怎樣才能解決呢?

+0

我沒有得到'test'部分。請你解釋一下 – mrid

+0

@mrid我想匹配每個以'this'開頭並以'string'結尾的句子,如果該句子不包含'test'的話。 – Shafizadeh

+0

@mrid反之亦然https://regex101.com/r/ENHYLD/3 – Shafizadeh

回答

2

你做的事情是這樣被排除在列表中的「測試」的任何字符。做到這一點的方法是使用negative lookarounds。正則表達式然後看起來像這樣。

this((?!test).)*string

+0

你需要通過添加'?'來使其變成'lazy',就像這樣(this?(?!test)。)*?string'。測試你的正則表達式以下'這是一個字符串這是一個字符串這是一個字符串這是一個字符串這是一個字符串' – developer

-1

如果你想做到這一點沒有正則表達式,你可以使用fnmatch()

function match($str) 
{ 
    if (strpos($str, 'test') == false) /* doesn't contain test */ 
    { 
     if (fnmatch('this*string', $str)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    else 
     return false; 
} 
+0

可以解釋downvote? – mrid

相關問題