2017-09-16 39 views
-1
$s1='afa'; 
$s2='bebeeeb'; 

$s1=~/((\w)(?!\2))+\2?/; 

這個正則表達式匹配兩個字符串。 我只想匹配第一個字符串。 (第一個字符後跟任意字符,但不是第一個字符所拍攝的兩個字符可以重複任意次數。)如何在Perl中匹配這個字符串'afa'而不是'bebeeeb'?

+0

也許'/^(?:(\ W)(\ 1)?!)+ \ $ 1 /'?不知道你最後需要'\ 1?':你把它添加到你的模式中,以允許在字符串的末尾可選地出現第一個字符char,對吧?如果「任何字符」表示一個單詞char,則應將'.'換成'\ w'。 –

+2

這些規則是什麼都很不清楚 - 爲什麼第二個不是你想要的。請更清楚地解釋一下,也許還需要藉助一些更多的例子(正面和負面)來表達想要的東西。 'dcdcdc'可以嗎? 'dccc'可以嗎? 'cdefg'會好嗎? –

+0

不錯的正則表達式! https://xkcd.com/1313/ –

回答

0

你可以試試這個:

^(?:(\w)(?!\1))+$ 

Demo

0

更容易檢查相反的。

# Doesn't contain repeated word characters. 
$s !~ /(\w)\1/ 

否則,您必須在每個位置檢查。 (你是在任何位置檢查

# Every character is a non-word character or a non-repeated word character 
$s =~ /^(?:\W|(\w)(?!\1))*\z/ 

如果輸入只能包含單詞字符,上述簡化爲

# Every character is a non-repeated word character 
$s =~ /^(?:(\w)(?!\1))*\z/ 

甚至

# Every character is a non-repeated character 
$s =~ /^(?:(.)(?!\1))*\z/s 
相關問題