2017-01-16 48 views
2

所以我有以下的正則表達式:如何使一個正則表達式中包含「不等於前一組」

^(.).\1$

這意味着第一個字符和最後一個應該是相同的,他們可以是任何角色。現在考慮以下幾點:

BAA這將不與正則表達式,這是正確的

ASA這將匹配與正則表達式,這是正確的

AAA這將匹配與正則表達式匹配,但我不希望它匹配

我不希望正則表達式匹配AAA,因爲我想第二個字符不匹配第一個字符。所以我做了這個表達式: ^(.)[^\1]\1$

這正則表達式意味着
第一個字符:匹配任何
第二個字:不要匹配第一個字符
第三個字符:匹配的第一個字符

但這不起作用因爲「\ 1」變成了帶有轉義字符的「1」。我該如何解決這個問題?

+1

負向前視應該起作用。相關:http://stackoverflow.com/a/41572667/1639625 –

回答

2

試試這個正則表達式:

^(.)(?!\1).\1$ 

說明:

^   from the start of string 
(.)   match and capture any single character 
(?!\1).  assert that single following character does NOT match preceding one 
\1   match a single character identical to first one 
$   end of string 

演示在這裏:

Regex101

+0

只是想提出相同的,但我認爲'(?:...)'是沒有必要的。另外,爲什麼不在鏈接中添加其他「不應該匹配」的例子? –

+0

@melpomene對不起,我更新了。 –

+0

這就是他的意思:^(。)(?!\ 1)。\ 1 $,第二個字符不需要一個組 – Maslo

2

如何使用n個egative lookahead:

^(.)(?!\1).\1$ 
相關問題