友人が私に尋ねたところ、私は困惑しました:同じキャラクターのシーケンスにマッチする正規表現を作る方法はありますか?たとえば、 'aaa'、 'bbb'では一致しますが、 'abc'では一致しません。同じ文字のシーケンスと一致する正規表現はどれですか?
m|\w{2,3}|
「abc」に一致するようなトリックはありません。
m|a{2,3}|
それは自分の質問に答えるなど 'BBB'、 'CCC'、
友人が私に尋ねたところ、私は困惑しました:同じキャラクターのシーケンスにマッチする正規表現を作る方法はありますか?たとえば、 'aaa'、 'bbb'では一致しますが、 'abc'では一致しません。同じ文字のシーケンスと一致する正規表現はどれですか?
m|\w{2,3}|
「abc」に一致するようなトリックはありません。
m|a{2,3}|
それは自分の質問に答えるなど 'BBB'、 'CCC'、
確かにもの!グループ化と参照はあなたの友人です:
(.)\1+
同じ文字の2つ以上の一致が一致します。 \w
の代わり.
を使用し、唯一の単語構成文字の場合、すなわち:
(\w)\1+
が一致しないと同じようにトリックを行うが、それを持っていないでしょう。
m|(\w)\1+|
\ Wはあなたが望むものの反対ですね。 – Telemachus
Telemachusが正しいです、これはあなたが質問で与えた例と一致しません。 – gpojd
また、正規表現にパイプ(または他のデフォルト以外のデリミタ)を使用しない方がいいです。 – Pat
注意を5.10に、我々は同様に後方参照のための代替表記を持っていること。
foreach (qw(aaa bbb abc)) {
say;
say ' original' if /(\w)\1+/;
say ' new way' if /(\w)\g{1}+/;
say ' relative' if /(\w)\g{-1}+/;
say ' named' if /(?'char'\w)\g{char}+/;
say ' named' if /(?<char>\w)\k<char>+/;
}
http://perldoc.perl.org/perlre.htmlまたはhttp://perldoc.perl.org/search.html?q=perlre –
これは、純粋な正規表現(正規言語で記述すること、すなわち、それら - ない Perlの正規表現)を使用しても可能です。残念ながら、それは、長さがアルファベットの大きさに比例する正規表現、例えば:... zは有限のアルファベットの記号である
(a* + b* + ... + z*)
を意味します。
したがって、Perl正規表現は、純粋な正規表現のスーパーセットではありますが、純粋な正規表現に使用したい場合でも、その利点があります。
これは一部の文字にのみ一致し、 '###'のようなものは見逃します。彼はアルファベットの文字をどこに与えたかの例を示したが、アルファベットの文字しか求めていない。私は '\ w'を '。'に置き換えます。 – gpojd
質問者が与えた非運用例に基づいて、私は英字だけを一致させたいと思っていました。私は説明の中でこれを表現していたはずです。 –
スラッシュ1は何を意味していますか? – CodyBugstein