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

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

この正規表現は、両方の文字列に一致します。 最初の文字列と一致させたい。 (最初の文字は任意の文字が続くなく、最初の文字は、キャプチャの2つの文字は、任意の回数繰り返すことができる。。)あなたはこれを試すことができこの文字列 'afa'の一致方法は? 'bebeeeb'はPerlと一致させないでください。

+0

多分 '/^(?:(\ w)(?!\ 1)。)+ \ 1?$/'?最後に '\ 1?'が必要であるかどうか確信していません。文字列の末尾に最初の単語charがあってもよいようにパターンに追加しましたか? "任意の文字"が単語charを意味する場合、 '.'は' \ w'に置き換えられます。 –

+2

ルールが何であるか、そしてなぜ2番目のルールがあなたが望むものではないのかはかなり不明です。ほんの少しの例(正と負)の助けを借りて、より明確に説明してください。 'dcdcdc'はOKでしょうか? 'dccc'はOKでしょうか? 'cdefg'はOKでしょうか? –

+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 
関連する問題