[過去ログ] Regular Expression(正規表現) Part16 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
736(1): 2023/06/23(金)02:02 ID:qwakAXsj(1/2) AAS
and検索みたいなのってできない?
今まで[ABC]と[あいう]は2回に分けて検索してたけど1回で済ませたい
737(1): 2023/06/23(金)02:09 ID:gmkpJif8(2/6) AAS
>>736
^(?=.*?ABC)(?=.*?あいう)(?=.*?甲乙丙)
738: 2023/06/23(金)02:35 ID:qwakAXsj(2/2) AAS
>>737
感謝
739: 2023/06/23(金)12:02 ID:2Ntzjt3B(1/2) AAS
[文章]
AAAaiueo111 xxx
aaaaa
AAAkakikukeko xxx
b b b
AAAsasisuseso
ccccc
AAAtatituteto000
ddd123
上記の文章で先頭がAAAの行だけ抜き出して、さらにAAAを削除して末尾にxxxがある場合はxxxも削除する正規表現を考えています。
省4
740(1): 2023/06/23(金)13:06 ID:gnUd2/2c(1) AAS
AAAで始まらない1行|先頭のAAA|末尾のxxx
741(2): 2023/06/23(金)13:54 ID:WBrlaKRC(1) AAS
^AAA|xxx$|^.*\r\n → 削除
742(1): 2023/06/23(金)15:20 ID:2Ntzjt3B(2/2) AAS
>>740
>>741
ありがとうございます。
743(2): 2023/06/23(金)19:05 ID:zWmLGOhD(1/5) AAS
^AAA([^\r\n]*?)(?:xxx)?$|^[^\r\n]*(?:\r\n|[\r\n])?
$1
アク菌で書けませんぞテスト
744(1): 734 2023/06/23(金)19:21 ID:zWmLGOhD(2/5) AAS
>>735
PCRE2では\p{Punct}は存在しないんだね
www.pcre.org/current/doc/html/pcre2syntax.html
[\p{P}\p{S}]で代用になりそう、全角文字にもマッチするけど
プロパティがこれだけいろいろあると全部を把握するだけでも大変だなぁ
> +
言われてみれば+があるのはおかしいw 忘れ物だったのかw
745: 2023/06/23(金)21:34 ID:gmkpJif8(3/6) AAS
>>744
不思議な点は
PCRE2だと、[[:punct:]]で&が先にキャッチされて>のgt;が取り残されてしまうので
|>とあってもマッチしなくなる
bregonig.dllだと
>にキャッチされてマッチする(punctより>が優先される
(PCRE2は最短マッチが優先されて、bregonigは最長マッチが優先なのか?)
これはorの記述の順序には関係なく左に(先に)>を書いても結果は同じ
746(1): 2023/06/23(金)22:07 ID:zWmLGOhD(3/5) AAS
ここのテストサイトで regex101.com/
^([[:punct:]]|>|<)$ を < にマッチさせたら成功したけど
本物のPCRE2ではマッチしないの?余計な半角スペースが入ってたりしない?
それで>>732に要らないはずの先読みを入れてたんだね
これがマッチしないならバグかも知れない
もしまたゴミとかのうっかりミスが原因だったとしても気にしないでね、俺もよくやらかすから
747: 2023/06/23(金)22:09 ID:zWmLGOhD(4/5) AAS
あ、&が化けちゃった
^([[:punct:]]|>|<)$ を > にマッチさせて
748: 2023/06/23(金)22:31 ID:gmkpJif8(4/6) AAS
>>746
今確認したらそのとおりだった
俺は以前一体何をやったんだろう?
749: 2023/06/23(金)22:36 ID:gmkpJif8(5/6) AAS
今考え付くのは
^(?>[[:punct:]]|&gt;)+
とか
&gt;のみ書いといて&lt;に引っ掛かったとかとかかなあ?
750: 2023/06/23(金)22:47 ID:gmkpJif8(6/6) AAS
さすがに(?>)を使って気づかないわけないから(使った覚えもないし)
恥ずかしいけど、gt;とlt;の取り違えをやらかした気がする
751(1): 2023/06/23(金)23:16 ID:zWmLGOhD(5/5) AAS
そういうこと俺もあるから分かるわーw
頭が回ってないときに動作確認するとしっかり確認出来てないのに確認したつもりに
なってしまうんだよなぁ、だから休憩と二重三重の確認はめちゃ大事
間違えた原因は分からないけどとりあえずゆっくり休んでくれw
752: 2023/06/24(土)00:27 ID:X4q59utv(1/4) AAS
勘違いした理由が分かった
^([[:punct:]]|&gt;)+
これをやると&で切れちゃうんだ
s/([[:punct:]]|&gt;)+//g
をやるとgtが置換されずに残る
末尾に$とか目標物を付ければ切れないんだが
さてどうして切れるのか誰か教えて
753: 2023/06/24(土)00:36 ID:X4q59utv(2/4) AAS
やっぱ左側が優先なのか
(&gt;|[[:punct:]])
と入れ替えたら切れない
754: 2023/06/24(土)09:56 ID:o3ZfF1Sp(1) AAS
>>742 >>741
それだと行頭からxxxだけしかない行の改行が削除できずに残りそうだけどどうだろう
^AAA|^.*\r\n|xxx$ → 削除
755(1): 751 2023/06/24(土)11:05 ID:QPqcCtG1(1/3) AAS
>やっぱ左側が優先なのか
正解
ただ、同じ正規表現で&;gt;にマッチする環境もあるよ
考えられる中で最長になるマッチを探すエンジン
バックトラックの動きがまだよく分かってないなら>>708のNTTと早大の正規表現や
>>743で使ってる .* と .*? の動きも見直しておいたほうがいいかも
見た目は簡単そうに見えるけど正しくバックトラックの動きを理解してないと作れない
舐めてかかると酷い目に遭う怖いヤツだよ(過去に経験あり)
756: 2023/06/24(土)11:10 ID:QPqcCtG1(2/3) AAS
あ、NTTと早大のやつは正規表現を^と$で囲ってから動かして
757: 2023/06/24(土)11:21 ID:X4q59utv(3/4) AAS
>>755
いままで
+や++での強欲のバックトラックが最長を探すのに違いがあるとは思っていなかったよ
最大の最長を探す記述ってのも欲しいな
758: 2023/06/24(土)16:54 ID:QPqcCtG1(3/3) AAS
>最大の最長を探す記述
ちょっと探してみたらPHPのオプションにあった
www.php.net/manual/ja/function.mb-regex-set-options.php
> l 最も長くマッチするものを探す
この処理ってすごく重くなりそうなイメージがあったけどそうでもないのかな
759: 2023/06/24(土)17:35 ID:X4q59utv(4/4) AAS
PHPだけじゃなあ
結局、事故らない為には長さの違うダブリは取り除いておくほうが無難ってことか
760: 743 2023/06/25(日)11:57 ID:YeZqv3UB(1) AAS
>> 759
考えてみると長いほうを前にしても短いほうがマッチ出来なくて詰むケースがあるのか
正規表現むずかしい
>> 740 741 754
改行コードがLFやCRのみの場合に対応してない
最後の行がAAAで始まらない場合、行末の改行が無い場合に削除されない
743は両方に対応しているけど740の発想のほうがシンプルで優れてるね
あとサクラエディタでは\Rが使えるので使ったほうが簡単に書けそう
761(1): 2023/06/27(火)21:16 ID:TnfGmDZI(1) AAS
最長一致マッチが有効のとき、下の正規表現は何にマッチすべき?
"abcd" =~ /abc\Kd|abc/;
\Kの前を文字列長に含めるべきか否かを考えて下さい
762(1): 2023/06/28(水)12:49 ID:vk3PbjZ1(1) AAS
元より最左ルールに基づいてdよりabcにマッチすべきとはならんやろ
763: 761 2023/06/28(水)13:05 ID:m0cBggZC(1) AAS
>>762
ありがとうございます、それは正しい意見だと思います
\Kの前を文字列長に含めるべきかどうかについてはどうお考えですか?
今後の参考にしたいと考えております
764: 2023/06/29(木)11:57 ID:0JMnG4u5(1) AAS
最長一致する正規表現が有効の場合
1、「abc」「あ」
2、「て゛」「で」
A. 前が長い
B. 同じ長さ
C. 後ろが長い
765: 2023/07/02(日)20:25 ID:/BVUs+ug(1) AAS
奥が深すぎる
上下前次1-新書関写板覧索設栞歴
あと 237 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.020s