[過去ログ] Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
562: 2018/08/13(月)00:16 ID:06GD6VnQ(1) AAS
キーワードと構成次第だろ
563: 2018/08/13(月)00:22 ID:LXDaPxOa(1) AAS
rubyキチやぞ
564(1): 2018/08/13(月)03:34 ID:EnLsbSTB(1) AAS
>>561
一部の環境では括弧等のネスト構造を取り扱いをサポートした正規表現があるよ
PCRE(Perl 5.10以降)やruby(鬼雲)、Python,PHPなどでも
C#の.NET Framework環境でもあったんじゃないかな
565: 2018/08/23(木)19:11 ID:4kav5HXR(1) AAS
.*
何にでもマッチさせることができる最強で万能な正規表現
566: 2018/08/23(木)19:26 ID:FR6Db0Vc(1) AAS
改行にはマッチしないけどね
[\s\S]*
567(2): 2018/08/24(金)02:29 ID:cgE41D9D(1) AAS
>>561
> HTML のように、要素に親子関係があるもの・構造化されたものは、正規表現じゃ無理
そういうこともできるように拡張した正規表現があればいいのに
さらに階層、treeも可
568: 2018/08/24(金)03:56 ID:k/tOxHF9(1/2) AAS
>>567
鬼雲使ってみれば?
569: 2018/08/24(金)10:28 ID:bF2ATmvV(1) AAS
BNF使えよ
570: 2018/08/24(金)10:38 ID:wb3Q/jKx(1/2) AAS
なんか知識が数年前で止まっちゃってる人がちらほらいるな
正規表現がネストに対応したのなんてもう一昔前ってイメージだけど
571(1): 2018/08/24(金)12:46 ID:srP6ovAZ(1) AAS
別に正規表現だけを追いかけてるわけじゃないから
572(1): 2018/08/24(金)12:48 ID:ZVlysGry(1) AAS
なんでも正規表現で済まそうとするひとって
意地でもVBA使い続けてるひとと大差ない
573: 2018/08/24(金)12:49 ID:yKVFr0CJ(1) AAS
適材適所
574: 2018/08/24(金)16:58 ID:k/tOxHF9(2/2) AAS
>>567
てか>>561には>>564のレスが既に付いてたじゃんか
575: 2018/08/24(金)18:58 ID:wb3Q/jKx(2/2) AAS
>>572
賢い人程手段をたくさん知り
その中から取捨選択するからな
>>571
さすがに勉強不足すぎだろw
何年前で知識止まってんだよ
576: 2018/08/25(土)00:03 ID:r5O9PJUC(1) AAS
はいはい、正規表現マスターすごいねー
これでいいかな w
577: 2018/08/25(土)00:35 ID:I7tIpqHO(1) AAS
底辺に行くほど知識自慢はしかたがないだろ、正規表現に限らず
ただ掲示板的に質問したいのにバカがしゃしゃり出てきて迷惑だよな
578: 2018/08/25(土)10:52 ID:J+b/MRtJ(1) AAS
的確な指示されても気に入らない回答だからと人の話を聴かない人は成長しないよ
自分の気に入る回答しかも自分と同じレベルの回答もらって喜んでればいい
579(1): 2018/08/26(日)15:08 ID:sCPJIsfv(1/4) AAS
俺なんか中学の勉強もロクにしなかったのに正規表現を理解したいから
今、大学レベルの数学を勉強してる・・なかなか進まないけどね・・
>>556 の質問からパーサとか出てくるのはちょっと違うと思うよ
metaタグ拾えばいいだけだよね?難しく考えすぎだよ
あとHTMLソースのほうが糞で実際の文字コードとmetaタグで指定されてる
文字コードが違うなんてことや、文字コードの指定が複数個所あるなんていう
2ページ分のHTMLをそのままくっ付けましたなんていうのも稀にあるから
そういう糞なHTMLを相手にする場合は対応を考えないといけないね
580: 2018/08/26(日)15:31 ID:CE5Lnwmj(1/2) AAS
>>579じゃあmetaタグを拾って来る正規表現をどうぞ
581: 2018/08/26(日)15:37 ID:zPuf2RGr(1) AAS
え? そんなことマジで聞いてるのか?
582: 2018/08/26(日)15:40 ID:CE5Lnwmj(2/2) AAS
マジだからちゃんと教えてくれよ
583(13): 2018/08/26(日)18:08 ID:sCPJIsfv(2/4) AAS
自分用に作るならこんな感じかなぁ、動作確認してないので使わないでね
|
<meta (?=\s) [^<>]* \s charset \s* = \s* (?:["']\s*)? ([^\s"'<>;]+)
|x;
こういうのは想定外 ※ " " の中に > がある
<meta comment="a>b" charset="UTF-8">
584: 2018/08/26(日)18:17 ID:O4hA/SKg(1) AAS
>>583
俺が書いた糞(>>559)より糞なコードが書かれて驚く
素直にパーサ使えよ
585: 2018/08/26(日)18:36 ID:sCPJIsfv(3/4) AAS
>>583 のほうがスマートなのは一目瞭然でしょ
ただ >>583 は こんな感じ 程度のものなのでツッコミ所があっても知らないよ
586(1): 2018/08/26(日)18:37 ID:5oVMxLBv(1) AAS
mataタグでのcharsetは定型的でしか使われないんで、仕様的に色々な場合に対応するのは無駄
俺が使うなら、こんなので十分
/<meta[^>]*\scharset=(["'])((?:(?!\1).)+)/i
587: 2018/08/26(日)18:52 ID:sCPJIsfv(4/4) AAS
ほとんどの場合はそれで充分だろうねw
588: 2018/08/27(月)04:46 ID:2QlJLeh2(1) AAS
マッチングテスト
[1] <meta charset="UTF-8">
>>557 1. 失敗
>>559 マッチ
>>583 マッチ
>>586 マッチ
[2] このスレのHTML
557 1. マッチ
559 失敗
583 マッチ
省1
589: 2018/08/29(水)16:43 ID:4UnjToZE(1) AAS
こんなバカが回答者してたのか
過去レス見ると前から張り付いてるようだね
590(1): 2018/08/31(金)20:05 ID:5NewXZva(1/2) AAS
なかなか興味深い
鬼雲に非包含オペレータを実装した話
外部リンク:qiita.com
591: 2018/08/31(金)21:09 ID:5NewXZva(2/2) AAS
bregonig.dll 2017/01/17 Ver.4.10 非包含オペレータに対応
うーん、非包含にマッチする正規表現はいつか自分で作れるように
なりたいと思ってたけど内部で勝手に作ってくれる時代になってしまったか〜
自分の知識は2013あたりで止まってるから浦島だ
592: 2018/09/01(土)01:28 ID:0IlLcsWm(1/2) AAS
ab(?~ba)ba
これを
ab((?!ba).)*ba
この従来通りの方式をベースに記述して、かつ、前者とまったく同じ
動作に書き直すことは可能かな?
両者の違いについては>>590のリンク参照
593: 2018/09/01(土)22:17 ID:0IlLcsWm(2/2) AAS
(?~abc)
これは↓とまったく同じ動作になると言って良さそう
(?:(?!abc).)*(?:(?=abc).{1,2})?
否定したい文字列が固定長なら先読みで書き換え可能らしい
594: 2018/09/12(水)19:47 ID:j29ToL0A(1) AAS
正規表現を言語化できるようなとこ知りませんか?
/^ab/
これを入れると、
↓
「abで始まる」
と変換されるようなサービスって無いでしょうか?
595: 2018/09/13(木)09:47 ID:l9KSlvFS(1) AAS
せっかく正規表現にした意味が無い
596(1): 2018/09/13(木)09:50 ID:NoauaeTl(1) AAS
外部リンク:jex.im
597: 2018/09/13(木)13:28 ID:a9m+mGXQ(1) AAS
視覚的に見れるサイトじゃなくて視覚的に作れるサイトがあったら便利かな
メタ文字を覚える必要が無くなるし動作を把握しながら作れる
そういうのが普及したらいいね
598: 2018/09/14(金)00:35 ID:qC9qAPWt(1) AAS
そういうのとはちょっと違う&grepツールになっちゃうけど
TresGrepってのが入力欄でのマウス右クリックから正規表現を指定出来たり
正規表現1文字入力ごとにエラーチェック⇒NGならエラーメッセージを表示したりと
ちょっと便利
599: 2018/09/14(金)06:51 ID:LTbXVNEK(1) AAS
>>596
これいいですね。
ありがとうございます。
600: 2018/09/14(金)14:14 ID:grBP2MzP(1) AAS
TresGrep使ってみたけど良くできてる
正規表現に何かしらの思い入れがあるのが分かる気がする
特に正規表現の複数行入力が出来るのはいい
自分は複数行入力が当たり前になるべきだと前から考えていて
それが実装されててちょっと感動してしまった
601(3): 2018/09/17(月)12:06 ID:SR+usNFF(1) AAS
C#、System.Text.RegularExpressions.Regexの正規表現で
xxの中を取り出すにはどうしたらいいのでしょう?
ただし取り出したいのはトップのxxで、xxが閉じる前にyyがあるときはそのxxは無視という条件付きです
対象文字列 "<xx><xx><yy>111</yy></xx></xx><xx>222</xx><xx>333</xx>";
試した正規表現 @"<xx>.*?[^(</yy>)]</xx>"
結果
<xx><xx><yy>111</yy></xx></xx><xx>222</xx>
<xx>333</xx>
欲しい結果
<xx><xx><yy>111</yy></xx></xx>
省2
602(2): 2018/09/17(月)13:51 ID:tNilsymD(1/2) AAS
プログラムとはちょっと違うのですが、2chMateで荒らしをNGする正規表現を作りたくて悩んでます
日本語で書くと、
"外部リンク:"又は"外部リンク:"が合わせてn回以上出てきた場合(対象は複数の改行を含む文字列)
にマッチするような正規表現って可能でしょうか?
603(1): 2018/09/17(月)14:52 ID:QtMg2HjE(1) AAS
>>601
結果と欲しい結果の違いが改行しかないような
>>602
n=3
(?si:https?:\/\/.*?){3,}
604: 602 2018/09/17(月)15:04 ID:tNilsymD(2/2) AAS
>>603
迅速なご回答ありがとうございます。
この方法でうまくいきました!
605(3): 2018/09/18(火)00:00 ID:lHFpavF+(1/2) AAS
>>601
.NET Frameworkの正規表現は知らんけど、鬼雲でなら
(?=<xx>)(<(\w+)>([^<]*|\g<-3>)*</\k<-2-0>>)
これは最低限のものでイレギュラーなものには対応しない
文字列でエスケープされてるとかコメントが入ってるとか
タグにタグ名以外の余計なものが入ってるとか(</a href=...>とか<br />とか)
ペアでないタグがあるとか(<br>のような単独タグ,<xx>と</xx>のどちらかしかないとか)
そういうのにも対応させるなら工夫して
一応、.NET Frameworkの正規表現の再帰については
外部リンク:qiita.com
606: 2018/09/18(火)00:12 ID:oPOmCM6y(1/2) AAS
ありがと。もう少し単純にできるかと思っていたけどそんなに複雑になるのね
正規表現使わずにやる方向で考えてみます
607(2): 583 2018/09/18(火)00:55 ID:t0fL3l18(1/6) AAS
>>605のリンク先見てやっつけで作ってみた
<xx>(?>(?:(?!</?xx>).)*)</xx>|<xx>((?'open'<xx>(?>(?:(?!</?xx>).)*))+(?'-open'</xx>(?>(?:(?!</?xx>).)*))+)*</xx>(?(open)(?!))
608: 2018/09/18(火)01:11 ID:0krUYS0m(1) AAS
典型的なダメ質問者だな。
609: 583 2018/09/18(火)02:17 ID:t0fL3l18(2/6) AAS
ミスってた、>>607はボツってことで・・
タグとタグの間の文字列の扱いが意外と難しい
610: 2018/09/18(火)06:08 ID:oPOmCM6y(2/2) AAS
確かにダメ質問者w
「xxが閉じる前にyyがあるときはそのxxは無視」という一見簡単そうなルールが予想以上に難しいようで
楽したいから正規表現使いたいのだけどあまり複雑になると楽じゃないからほかに逃げたくなる
611(3): 2018/09/18(火)07:04 ID:iA/s8q9i(1/5) AAS
ぶっちゃけ欲しい結果が何なのか結局よく分かってない
<xx>(?:(?<tag><(?!yy>)(?<tagname>[a-z]+)>)*\d+(?<-tag></\k<tagname>>)*(?(tag)(?!)))*</xx>
612: 2018/09/18(火)07:13 ID:oqy73oSH(1/3) AAS
ID変わった
その表現だと <xx><xx><yy>111</yy></xx>
欲しい結果は<xx><xx><yy>111</yy></xx></xx>
こういう尻切れになることが多い
613: 2018/09/18(火)07:16 ID:iA/s8q9i(2/5) AAS
どういうことよ
>>611の正規表現で <xx><xx><yy>111</yy></xx></xx><xx>222</xx><xx>333</xx> にマッチングすると
<xx>222</xx> と <xx>333</xx> にマッチするでしょ?
<xx><xx><yy>111</yy></xx> はどこから出てきたの?
614: 2018/09/18(火)07:42 ID:oqy73oSH(2/3) AAS
申し訳ないミス。"<xx>.*?</xx>"の1件目の結果だったw
その正規表現だと2件マッチ
欲しい結果は>>601にある3件
615: 2018/09/18(火)07:46 ID:iA/s8q9i(3/5) AAS
> xxが閉じる前にyyがあるときは
これは直前ってこと?
<xx><yy>111</yy></xx> にはマッチしないってことでいいの?
616: 2018/09/18(火)07:55 ID:lHFpavF+(2/2) AAS
>ただし取り出したいのはトップのxxで
これだけで<yy></yy>があろうがなかろうが良いと俺は思ったんだけど
617(2): 2018/09/18(火)08:27 ID:iA/s8q9i(4/5) AAS
yyがどうでもよければ
<xx>(?:(?:<(?<tag>[a-z]+)>)*\d+(?:</(?<-tag>\k<tag>)>)*(?(tag)(?!)))*</xx>
かなぁ
618: 2018/09/18(火)08:36 ID:oqy73oSH(3/3) AAS
閉じる前というのは直前という意味で
対象が"<xx><xx><yy>111</yy></xx></xx><xx>222</xx><xx>333</xx><xx><yy>444</yy></xx>"
の場合は、<xx><yy>444</yy></xx>を無視したの3件マッチにしたい
>>611と>>617ベースできそうだからがんばってみます。ありがとう
619: 2018/09/18(火)09:00 ID:iA/s8q9i(5/5) AAS
まぁスタック使う構文が必要な時点で正規表現向きでないのは間違いない
620: 583 2018/09/18(火)12:56 ID:t0fL3l18(3/6) AAS
本来の数学的な正規表現という意味では向いてる質問なんだけどね
これぞ正規表現の仕事っていう質問
でもプログラムの検索で使う正規表現ではなかなか使われないね
621: 583 2018/09/18(火)13:25 ID:t0fL3l18(4/6) AAS
>>607を修正
<xx>(?>(?:(?!</?xx>).)*)((?'open'<xx>(?>(?:(?!</?xx>).)*))+(?'-open'</xx>(?>(?:(?!</?xx>).)*))+)*</xx>(?(open)(?!))
これは>>605のリンク先の例を↓のように書き換えただけ
< を <xx>・・・
> を </xx>・・・
\A を <xx>
\z を </xx>
「・・・」 は<xx>または</xx>の間に挟まれている文字列
省2
622: 583 2018/09/18(火)13:29 ID:t0fL3l18(5/6) AAS
間違い
\A を <xx>
正しくは
\A を <xx> ・・・
623: 583 2018/09/18(火)18:51 ID:t0fL3l18(6/6) AAS
>>611のはミスってるね
<xx><b><a>111</a></a></xx> にマッチする
<xx><b><a>111</a></b></xx> にマッチしない
この問題は>>617で修正されてる
()* \d+ ()* のところが0回以上のループで正しく動くのは面白いな
一番外側の (?: )* はいらないかも
624: 583 2018/09/21(金)05:18 ID:LI7qokUP(1/6) AAS
(?# 主要部)
<xx(?&Attribute)>(?&innerText)(?&roop)?+</xx>
(?# 定義部)
(?:|(?!)
(?'Attribute'(?:\s[^>]*+)?+)
(?'singletag'br)
(?'tagname'[a-z][a-z\d]*+)
(?'innerText'
(?: [^<]*+
| <(?&singletag)(?&Attribute)>
省9
625: 2018/09/21(金)05:54 ID:LI7qokUP(2/6) AAS
こだわった点
・主要部と定義部に分けて全体の構造が分かりやすくした
・繰り返しは全て強欲。無駄なバックトラックをさせない
・再帰には * を使わず、部分呼び出し自身に繰り返しをさせている
・定義部は (?:|(?!) 〜 ) として定義部がサーチに使われるのを避けている
>>605には ([^<]*|\g<-3>)* という部分があって
([^<]*)* というバックトラック処理がえらいことになる部分があって気になった
あと再帰を使ってるのにループを * にさせているのを見て
* を使わずに書けるはずだと思って作ってみた
626(2): 2018/09/21(金)06:11 ID:LI7qokUP(3/6) AAS
こういう書き方をした正規表現をサクラエディタで使おうとすると
1行に繋げなければならない、これでは不便すぎる
鬼雲の強力な正規表現を快適に使い倒せるようにするべき
出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい
そうすればここのような掲示板に貼るときに便利
逆に1行で書かれた正規表現を複数行に直す機能も欲しい
手動でいちいち改行を入れる手間が省けて快適になる
この2つの機能は正規表現ライブラリに実装されることが望ましい
そうすれば他のテキストエディタの作者も気軽に実装出来るようになる
正規表現に新しいメタ文字が作られたときの対応も容易になる
627: 2018/09/21(金)06:18 ID:LI7qokUP(4/6) AAS
出来れば定義用の新しいコマンドが欲しい
定義のためのカッコなのにキャプチャが有効になってたり、
正規表現オブジェクトが無駄に肥大化してしまったりするから
628(1): 2018/09/21(金)07:17 ID:fJq/snux(1) AAS
>>626
> 出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい
ここはム板なので言い出しっぺの法則が適用されます
629(1): 583 2018/09/21(金)19:24 ID:LI7qokUP(5/6) AAS
>>628
テキストエディタの正規表現の入力ウインドウに付けて欲しいんだ
次世代のテキストエディタは↓こうなって欲しい
1、画面をいっぱいに使って正規表現の複数行の記述が出来る
2、複数行で書かれた正規表現を一行に繋げるボタン
3、一行で書かれた正規表現を複数行に展開するボタン
これがスタンダードになるといいな
630: 2018/09/21(金)20:42 ID:c6u7OXiZ(1) AAS
>>629
ガンバ w
631: 2018/09/21(金)20:44 ID:OGYiByDT(1) AAS
やっぱそうなるよな ここではw
632(1): 2018/09/21(金)23:08 ID:3+OghnRP(1) AAS
extendedフラグを付けて鬼雲に渡せば、複数行で処理してくれる。
エディタ側で1行にくっつけたりする必要はない。
633(1): 583 2018/09/21(金)23:41 ID:LI7qokUP(6/6) AAS
>>632
そういうことじゃないんだな、>>626を読んでね
ちなみに複数行の正規表現を一行に繋げるのはかなり簡単なんだけど
一行で書かれた正規表現を複数行に展開するのはかなり難しい
正規表現のパーサを作るということになるから
だから正規表現ライブラリに実装されることが望ましい
ライブラリの作者なら細かい挙動まで把握しているから正確なパーサが作れる
逆にテキストエディタの作者がやろうとすると動作を把握しきれずに
不完全なものになったり、実装を諦めたりすることになりかねない
複数行をスタンダードにするためにはライブラリ側での実装が必須となる
634(1): 2018/09/22(土)02:13 ID:EPQO3h7N(1) AAS
>>633
鬼雲とbregonig.dllの作者さんまでどうぞ
Twitterリンク:k_takata
外部リンク:github.com
外部リンク:github.com
外部リンク[html]:k-takata.o.oo7.jp
あと鬼車オリジナルの作者さんも復活してたんだね
外部リンク:github.com
Twitterリンク:5chan_nel (5ch newer account)
635: 583 2018/09/22(土)21:31 ID:SLHR4wJP(1) AAS
>>634
bregonig.dllはプログラミング用のライブラリをテキストエディタでも
使えるようにしたっていう感じなのでプログラミングに必要のない機能は
付けたくないと思う、管理が大変になるからね
だから次世代の正規表現ライブラリと次世代のテキストエディタに期待
ちなみにテキストエディタに重きを置いたライブラリならこんなのが可能になるはず
検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'
対象テキスト: blue
置換結果:青
省7
636: 2018/09/26(水)01:40 ID:3FykrnoG(1/3) AAS
xyz? を含まないものにマッチする正規表現
外部リンク[htm]:www.din.or.jp
外部リンク[htm]:www.din.or.jp
> fmcat =(retofm
..のところで導かれている正規表現は明らかにxyやxyzを含む正規表現だけど
これは単なるミスなのかな?こんな難しいことをやってる人がこんなミスを
見逃すとはとても思えないから何か違うものなのかなぁ・・
637(1): 2018/09/26(水)03:09 ID:Rr41G2Hg(1) AAS
明らかに含むって試してから言ってる?
638: 2018/09/26(水)10:58 ID:3FykrnoG(2/3) AAS
>>637
> fmcat =(retofm
で始まる3行のところの正規表現についてですよ?
(〜)* x (〜)* yz の形なので明らかにxyzにマッチします
*y(x*[^xy]y*)*x* は誤植でしょうけど・・
639: 2018/09/26(水)14:05 ID:pN+YCTD5(1) AAS
あー確かににそこはおかしいな
引用っぽいけど
640: 2018/09/26(水)23:39 ID:3FykrnoG(3/3) AAS
やっぱり間違いなんですかね?
プログラムを使って自動的に算出してるようなのに・・
641: 2018/09/27(木)00:18 ID:0xNuoCxe(1) AAS
俺もわからんけど、prologらしいから、括弧や表記はスタック順になってるとかでは?
642: 2018/09/27(木)02:58 ID:TOnM2DUW(1) AAS
>prolog
なるほど、"xyを含まない正規表現" のところに grail って書いてあったのは
prologとやらの実行ソフト名だったのか
外部リンク:github.com
これの使い方を調べれば謎が解けそうですね
暇なときに試してみます、ありがとう
643(1): 2018/10/06(土)17:50 ID:0JYIRqz1(1) AAS
検索対象文字 <test>a="akari"desu</test>
正規表現 a="*"
で、検索結果が「a="akari"」でなく、「a="」しか取得できないのはなぜでしょうか?
644: 2018/10/06(土)17:56 ID:e52HQVrn(1) AAS
馬鹿には無理
645: 2018/10/06(土)18:01 ID:FAIH8E2E(1) AAS
a=\".*\"
メタ文字(ダブルクォート)をバックスラシュでエスケープ
.(ピリオド)で任意文字で0文字以上(アスタリスク)をつければ
とりあえずイケル
それでも意図どおりにマッチングしないことは予見できる
646: 2018/10/06(土)18:14 ID:OZkGL/sg(1/3) AAS
ワイルドカードと混同しちゃってるのか
ワイルドカードと正規表現を同時に使えるTresGrepなら動くかも
647: 2018/10/06(土)18:16 ID:OZkGL/sg(2/3) AAS
正規表現っぽいIDになった?
648: 2018/10/06(土)18:23 ID:OZkGL/sg(3/3) AAS
OZk G L /sg
ohzakiさんゲームのリンク
な気がしたので貼る、最近更新したばっかりやん
ゲーム関係のリンク
外部リンク[htm]:www.din.or.jp
649: 2018/10/14(日)12:53 ID:zaukh1NH(1/2) AAS
>>643
ワロタw
正規表現の*とワイルドカードは違うぞ。詳しくはググれ。
多分a="[^"]*"でいけると思うけど詳しくはググれ。
650(1): 2018/10/14(日)14:33 ID:eP/1gSav(1/2) AAS
ちょいと質問させて
a="[^"]*"
と書くことが多いんだけど
a=".*?"
と書くのとで結果に違いでるのかな?
651(1): 2018/10/14(日)14:56 ID:EqzxaMkD(1) AAS
""のなかに改行が含まれてた場合、違いが出るよ
652(1): 2018/10/14(日)15:11 ID:zaukh1NH(2/2) AAS
あと、.*?は使えない正規表現の処理系があるんじゃなかったっけか。詳しくは(ry
653: 2018/10/14(日)15:27 ID:eP/1gSav(2/2) AAS
>>651-652
なるほど、ありがとうございました
654(1): 2018/10/14(日)22:51 ID:yTLvFK6H(1) AAS
1、<test>a="[^\"]*"</test>
2、<test>a=".*?"</test>
この2つが↓これにどうマッチするか試してごらん
---------------------------------------------------------------------------
<test>a="pokemon"(^-^)</test> <test>a="doramon"</test>
----------------------------------------------------------------------------
655: 650 2018/10/14(日)23:38 ID:wMwKNjnw(1) AAS
>>654
サンプルありがとう
でも、そういった検索/置換対象の場合だったら .*? は最初から考えないとは思う
656: 2018/10/15(月)00:13 ID:fKW/Yset(1/3) AAS
この誤爆のことに注意を払えているなら .*? で問題ないよ
[^"] はそういう心配をしなくて良くなるからこっちを予防的に使うのもあり
657: 2018/10/15(月)22:36 ID:fKW/Yset(2/3) AAS
# 文字列 xy を含まない正規表現
$states = 3;
@matrix = ( # E A p q ※ A は求める答え
[qw(X X E E)], # A = p + q = pε + qε
[qw(E X [^x] [^xy])], # p = p[^x] + q[^xy] + ε
[qw(X X x x)], # q = px + qx
);
658: 2018/10/15(月)22:37 ID:fKW/Yset(3/3) AAS
# 文字列 xyz を含まない正規表現
$states = 4;
@matrix = ( # E A p q r ※ A は求める答え
[qw(X X E E E)], # A = p + q + r = pε + qε + rε
[qw(E X [^x] [^xy] [^xz])], # p = p[^x] + q[^xy] + r[^xz] + ε
[qw(X X x x x)], # q = px + qx + rx
[qw(X X X y X)], # r = qy
);
659: 2018/10/18(木)14:54 ID:s3Db0e4D(1/2) AAS
y*(x*[^xy]y*)*x* について考察
左右対称形、後ろから読めば yx を含まない正規表現になる
x の後ろでは [^xy] しかマッチ出来ないようになっている
{[^x]|x+[^xy]}*x* # 状態遷移図から導かれる正規表現
# ※ ここでは見やすいように ( ) を { } としている
# 最後の x* は状態 0 から状態 1 への遷移を表している
[^x]*{x+[^xy][^x]*}*x* # 分岐の繰り返し ( | )* の展開
([^xy]|y)*{x+[^xy]([^xy]|y)*}*x* # [^x] を ([^xy]|y) に分解
y*{x*[^xy]y*}*x* # x+ を x* にすると中央の [^xy] が分解した [^xy] と
# 同じを動作するので分解した [^xy] を消せる、完成
660: 2018/10/18(木)23:54 ID:s3Db0e4D(2/2) AAS
こっちのほうがスマートだ..
# 状態遷移図から導かれる正規表現
([^x]|x+[^xy])*x*
# [^x] を分解し、[^xy] と y にする
([^xy]|y|x+[^xy])*x*
# [^xy] と x+[^xy] を1つにまとめる
(y|(x+)?[^xy])*x*
# (x+)? は x* に書き換えられる
(y|x*[^xy])*x*
省2
661: 2018/10/20(土)20:45 ID:WB0b2hD6(1) AAS
(a|b|c)* の展開についての考察
# (b|c) を1つのパーツと考えて {a|(b|c)}* を展開する
a*{(b|c)a*}*
# 分配の法則
a*{ba*|ca*}*
# 再び (x|y)* の形が現れたのでここを展開する
a*(ba*)*{ca*(ba*)*}*
a=123、b=456、c=789 とすると
^(123)*(456(123)*)*(789(123)*(456(123)*)*)*$
上下前次1-新書関写板覧索設栞歴
あと 341 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s