
ちょうど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で質問しましょう!
似たような質問が見つかりました
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- アクセサリ・腕時計 時計 1 2022/04/13 19:09
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Excel(エクセル) Excelヘルプの原文を表示する最速の方法(手順)には? 1 2023/08/11 11:30
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- 計算機科学 検索の仕組み 5 2023/07/17 11:03
- 洋画 「トラ・トラ・トラ!」の字幕 3 2022/10/17 01:15
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
grepの正規表現での最短マッチ...
-
正規表現 秀丸エディタ 行頭か...
-
PS4コントローラーをPCでゲーム...
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
Chr(13)とChr(10)の違いは?
-
wordで均等割り付けをするとき...
-
プログラムについての質問です...
-
EBCDIC⇒SJIS変換の方法
-
エクセルでセル内改行の複数行...
-
4Kの外部モニターに出力すると...
-
パワーポイントのテキストボックス
-
Accessのテーブルからcsv出力す...
-
文字列からタブコードを取り除...
-
Googleスプレッドシートでワイ...
-
エクセルで文字列の最大値を抽...
-
ORCLEでの小数の表示方法の変更...
-
パワーポイントで文字の上に線...
-
VBAでの Replace関数で、ワイル...
-
Tera Term のマクロでの改行コ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現 秀丸エディタ 行頭か...
-
メールアドレスの正規表現について
-
正規表現でAND検索はできる...
-
第二水準漢字が含まれるか?
-
[VBS] テキストファイルから任...
-
正規表現でシングルクォーテー...
-
正規表現でカウントアップ(?)す...
-
VB2005で、正規表現を使いたい
-
正規表現です。括弧内にある複...
-
文章中全ての半角カッコ ( の...
-
文字列検索(grepのようなもの)...
-
grepの正規表現での最短マッチ...
-
sedで正規表現の後方参照を使い...
-
XMLファイルある内に書式につい...
-
perl でこのマッチは失敗します...
-
VB.NET で正規表現を使用した検...
-
正規表現で大文字小文字指定に...
-
grepにマッチした正規表現の文...
-
正規表現で( , -, ] を表すと。
-
正規表現の逆?
おすすめ情報
検索の仕組み上、直前一文字は必須なので、(2文字の連続は)
(.)(?!\1)(.)\2(?!\2)|^(.)\3(?!\3)
これで妥協できそうです。