ちょうどn文字の連続にマッチする正規表現を教えて下さい。
https://perldoc.jp/docs/perl/5.16.1/perlreref.pod
こちらにある正規表現の文法は全て使用可能です。
例えば、
abbcccddeeeeeff
という文字列に対して、丁度2文字であれば、「bb」「dd」「ff」のみ検索されるようなものです。
失敗例: (.)\1(?!\1)
検索の仕組み上、不可能でしょうか?
先頭から順に、
abbcccddeeeeeff
bbcccddeeeeeff
bcccddeeeeeff
cccddeeeeeff
ccddeeeeeff
cddeeeeeff
ddeeeeeff
deeeeeff
eeeeeff
eeeeff
eeeff
eeff
eff
ff
f
という風に検索されていくのだと思ってますが、この仕組みだと、頭の文字の前に同じ文字があるかどうかを認識するのは不可能ですからね…
No.2
- 回答日時:
例えば
my $str = "abbcccddeeeeeff2;
my %doubles;
() = $str =~ /((.)\2++)(??{($doubles{$1}++ if length($1)==2)})/g;
ってやると key %doubles は "bb", "dd", "ff" になる... けどこの辺が限界かなぁって気はする.
なるほど笑笑
それはちょっとズルいですね笑
しかし、ありがとうございました。
従来からの静的な正規表現で後方の参照が前方で出来ない限り無理なのでしょうね。。
No.1
- 回答日時:
それで合ってると思います。
あとは、それを取り出す言語側の記述ですね。
Perlで、「すべて取り出す」という記述が分からなかったので、RubyとPerlで。
Ruby
text = "abbcccddeeeeeff"
result = text.scan(/((.)\2)(?!\2)/).map(&:first)
Python
result = [x[0] for x in re.findall(r"((.)\2)(?!\2)",text)]
いずれも、括弧があると「マッチした物全体」じゃなくて括弧内しか抽出できないので、欲しい部分をさらに括弧で囲みます。
["bb","b"]と取り出されるので先頭要素を取ります。
「マッチした物全体を文字列からすべて取り出す」という機能のある言語なら、(.)\1(?!\1) のままでOKです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
第二水準漢字が含まれるか?
-
メールアドレスの正規表現について
-
正規表現 ^[^./][^/]*$ は
-
Mで始まりuで終わる文字列
-
文章中全ての半角カッコ ( の...
-
時間の正規表現
-
ちょうどn文字の連続にマッチす...
-
正規表現 秀丸エディタ 行頭か...
-
PS4コントローラーをPCでゲーム...
-
Chr(13)とChr(10)の違いは?
-
エクセルでアルファベットか数...
-
4Kの外部モニターに出力すると...
-
EBCDIC⇒SJIS変換の方法
-
PDFの改行URLを有効にす...
-
EXCELで=より左の文字を一括で...
-
「彡」って文字はなんという文...
-
MMDでavi出力が出来ない
-
Tera Term のマクロでの改行コ...
-
1文字って1バイトだったっけ?
-
【Excel VBA】複数ある特定の文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現 秀丸エディタ 行頭か...
-
正規表現でAND検索はできる...
-
メールアドレスの正規表現について
-
vbaの正規表現で、マッチした一...
-
文章中全ての半角カッコ ( の...
-
C言語のコメントを「正規表現」...
-
C言語にパターンマッチってない...
-
正規表現です。括弧内にある複...
-
第二水準漢字が含まれるか?
-
[VBS] テキストファイルから任...
-
MFCで正規表現
-
正規表現でシングルクォーテー...
-
正規表現で、青空文庫形式の入...
-
python 正規表現
-
正規表現でカウントアップ(?)す...
-
Perl 数値にスラッシュを入れる...
-
正規表現で特定文字列の全角カ...
-
セルの長文を、正規表現で連続...
-
さくらエディタでGrep検索する...
-
正規表現で大文字小文字指定に...
おすすめ情報
検索の仕組み上、直前一文字は必須なので、(2文字の連続は)
(.)(?!\1)(.)\2(?!\2)|^(.)\3(?!\3)
これで妥協できそうです。