Regular Expressionスレです。
質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
前スレ
Regular Expression(正規表現) Part13
http://echo.2ch.net/test/read.cgi/tech/1415149975/
次スレは>>980宜しく
天ぷら等2以降
Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2017/03/15(水) 02:04:35.47ID:e01p03UP584デフォルトの名無しさん
2018/08/26(日) 18:17:10.61ID:O4hA/SKg585デフォルトの名無しさん
2018/08/26(日) 18:36:53.61ID:sCPJIsfv586デフォルトの名無しさん
2018/08/26(日) 18:37:23.43ID:5oVMxLBv mataタグでのcharsetは定型的でしか使われないんで、仕様的に色々な場合に対応するのは無駄
俺が使うなら、こんなので十分
/<meta[^>]*\scharset=(["'])((?:(?!\1).)+)/i
俺が使うなら、こんなので十分
/<meta[^>]*\scharset=(["'])((?:(?!\1).)+)/i
587デフォルトの名無しさん
2018/08/26(日) 18:52:21.33ID:sCPJIsfv ほとんどの場合はそれで充分だろうねw
588デフォルトの名無しさん
2018/08/27(月) 04:46:33.83ID:2QlJLeh2589デフォルトの名無しさん
2018/08/29(水) 16:43:59.44ID:4UnjToZE こんなバカが回答者してたのか
過去レス見ると前から張り付いてるようだね
過去レス見ると前から張り付いてるようだね
590デフォルトの名無しさん
2018/08/31(金) 20:05:36.75ID:5NewXZva591デフォルトの名無しさん
2018/08/31(金) 21:09:12.34ID:5NewXZva bregonig.dll 2017/01/17 Ver.4.10 非包含オペレータに対応
うーん、非包含にマッチする正規表現はいつか自分で作れるように
なりたいと思ってたけど内部で勝手に作ってくれる時代になってしまったか〜
自分の知識は2013あたりで止まってるから浦島だ
うーん、非包含にマッチする正規表現はいつか自分で作れるように
なりたいと思ってたけど内部で勝手に作ってくれる時代になってしまったか〜
自分の知識は2013あたりで止まってるから浦島だ
592デフォルトの名無しさん
2018/09/01(土) 01:28:06.31ID:0IlLcsWm593デフォルトの名無しさん
2018/09/01(土) 22:17:13.09ID:0IlLcsWm (?~abc)
これは↓とまったく同じ動作になると言って良さそう
(?:(?!abc).)*(?:(?=abc).{1,2})?
否定したい文字列が固定長なら先読みで書き換え可能らしい
これは↓とまったく同じ動作になると言って良さそう
(?:(?!abc).)*(?:(?=abc).{1,2})?
否定したい文字列が固定長なら先読みで書き換え可能らしい
594デフォルトの名無しさん
2018/09/12(水) 19:47:12.85ID:j29ToL0A 正規表現を言語化できるようなとこ知りませんか?
/^ab/
これを入れると、
↓
「abで始まる」
と変換されるようなサービスって無いでしょうか?
/^ab/
これを入れると、
↓
「abで始まる」
と変換されるようなサービスって無いでしょうか?
595デフォルトの名無しさん
2018/09/13(木) 09:47:15.83ID:l9KSlvFS せっかく正規表現にした意味が無い
596デフォルトの名無しさん
2018/09/13(木) 09:50:19.09ID:NoauaeTl https://jex.im/regulex/#!flags=&re=%5Eab
597デフォルトの名無しさん
2018/09/13(木) 13:28:20.78ID:a9m+mGXQ 視覚的に見れるサイトじゃなくて視覚的に作れるサイトがあったら便利かな
メタ文字を覚える必要が無くなるし動作を把握しながら作れる
そういうのが普及したらいいね
メタ文字を覚える必要が無くなるし動作を把握しながら作れる
そういうのが普及したらいいね
598デフォルトの名無しさん
2018/09/14(金) 00:35:39.11ID:qC9qAPWt そういうのとはちょっと違う&grepツールになっちゃうけど
TresGrepってのが入力欄でのマウス右クリックから正規表現を指定出来たり
正規表現1文字入力ごとにエラーチェック⇒NGならエラーメッセージを表示したりと
ちょっと便利
TresGrepってのが入力欄でのマウス右クリックから正規表現を指定出来たり
正規表現1文字入力ごとにエラーチェック⇒NGならエラーメッセージを表示したりと
ちょっと便利
599デフォルトの名無しさん
2018/09/14(金) 06:51:39.20ID:LTbXVNEK600デフォルトの名無しさん
2018/09/14(金) 14:14:58.44ID:grBP2MzP TresGrep使ってみたけど良くできてる
正規表現に何かしらの思い入れがあるのが分かる気がする
特に正規表現の複数行入力が出来るのはいい
自分は複数行入力が当たり前になるべきだと前から考えていて
それが実装されててちょっと感動してしまった
正規表現に何かしらの思い入れがあるのが分かる気がする
特に正規表現の複数行入力が出来るのはいい
自分は複数行入力が当たり前になるべきだと前から考えていて
それが実装されててちょっと感動してしまった
601デフォルトの名無しさん
2018/09/17(月) 12:06:03.62ID:SR+usNFF 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>
<xx>222</xx>
<xx>333</xx>
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>
<xx>222</xx>
<xx>333</xx>
602デフォルトの名無しさん
2018/09/17(月) 13:51:51.89ID:tNilsymD プログラムとはちょっと違うのですが、2chMateで荒らしをNGする正規表現を作りたくて悩んでます
日本語で書くと、
"http://"又は"https://"が合わせてn回以上出てきた場合(対象は複数の改行を含む文字列)
にマッチするような正規表現って可能でしょうか?
日本語で書くと、
"http://"又は"https://"が合わせてn回以上出てきた場合(対象は複数の改行を含む文字列)
にマッチするような正規表現って可能でしょうか?
603デフォルトの名無しさん
2018/09/17(月) 14:52:47.98ID:QtMg2HjE605デフォルトの名無しさん
2018/09/18(火) 00:00:11.49ID:lHFpavF+ >>601
.NET Frameworkの正規表現は知らんけど、鬼雲でなら
(?=<xx>)(<(\w+)>([^<]*|\g<-3>)*</\k<-2-0>>)
これは最低限のものでイレギュラーなものには対応しない
文字列でエスケープされてるとかコメントが入ってるとか
タグにタグ名以外の余計なものが入ってるとか(</a href=...>とか<br />とか)
ペアでないタグがあるとか(<br>のような単独タグ,<xx>と</xx>のどちらかしかないとか)
そういうのにも対応させるなら工夫して
一応、.NET Frameworkの正規表現の再帰については
https://qiita.com/HMMNRST/items/15800514bbe66f504789
.NET Frameworkの正規表現は知らんけど、鬼雲でなら
(?=<xx>)(<(\w+)>([^<]*|\g<-3>)*</\k<-2-0>>)
これは最低限のものでイレギュラーなものには対応しない
文字列でエスケープされてるとかコメントが入ってるとか
タグにタグ名以外の余計なものが入ってるとか(</a href=...>とか<br />とか)
ペアでないタグがあるとか(<br>のような単独タグ,<xx>と</xx>のどちらかしかないとか)
そういうのにも対応させるなら工夫して
一応、.NET Frameworkの正規表現の再帰については
https://qiita.com/HMMNRST/items/15800514bbe66f504789
606デフォルトの名無しさん
2018/09/18(火) 00:12:00.46ID:oPOmCM6y ありがと。もう少し単純にできるかと思っていたけどそんなに複雑になるのね
正規表現使わずにやる方向で考えてみます
正規表現使わずにやる方向で考えてみます
607583
2018/09/18(火) 00:55:53.38ID:t0fL3l18 >>605のリンク先見てやっつけで作ってみた
<xx>(?>(?:(?!</?xx>).)*)</xx>|<xx>((?'open'<xx>(?>(?:(?!</?xx>).)*))+(?'-open'</xx>(?>(?:(?!</?xx>).)*))+)*</xx>(?(open)(?!))
<xx>(?>(?:(?!</?xx>).)*)</xx>|<xx>((?'open'<xx>(?>(?:(?!</?xx>).)*))+(?'-open'</xx>(?>(?:(?!</?xx>).)*))+)*</xx>(?(open)(?!))
608デフォルトの名無しさん
2018/09/18(火) 01:11:05.24ID:0krUYS0m 典型的なダメ質問者だな。
610デフォルトの名無しさん
2018/09/18(火) 06:08:34.66ID:oPOmCM6y 確かにダメ質問者w
「xxが閉じる前にyyがあるときはそのxxは無視」という一見簡単そうなルールが予想以上に難しいようで
楽したいから正規表現使いたいのだけどあまり複雑になると楽じゃないからほかに逃げたくなる
「xxが閉じる前にyyがあるときはそのxxは無視」という一見簡単そうなルールが予想以上に難しいようで
楽したいから正規表現使いたいのだけどあまり複雑になると楽じゃないからほかに逃げたくなる
611デフォルトの名無しさん
2018/09/18(火) 07:04:18.68ID:iA/s8q9i ぶっちゃけ欲しい結果が何なのか結局よく分かってない
<xx>(?:(?<tag><(?!yy>)(?<tagname>[a-z]+)>)*\d+(?<-tag></\k<tagname>>)*(?(tag)(?!)))*</xx>
<xx>(?:(?<tag><(?!yy>)(?<tagname>[a-z]+)>)*\d+(?<-tag></\k<tagname>>)*(?(tag)(?!)))*</xx>
612デフォルトの名無しさん
2018/09/18(火) 07:13:00.25ID:oqy73oSH ID変わった
その表現だと <xx><xx><yy>111</yy></xx>
欲しい結果は<xx><xx><yy>111</yy></xx></xx>
こういう尻切れになることが多い
その表現だと <xx><xx><yy>111</yy></xx>
欲しい結果は<xx><xx><yy>111</yy></xx></xx>
こういう尻切れになることが多い
613デフォルトの名無しさん
2018/09/18(火) 07:16:10.21ID:iA/s8q9i どういうことよ
>>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> はどこから出てきたの?
>>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:45.15ID:oqy73oSH615デフォルトの名無しさん
2018/09/18(火) 07:46:54.65ID:iA/s8q9i > xxが閉じる前にyyがあるときは
これは直前ってこと?
<xx><yy>111</yy></xx> にはマッチしないってことでいいの?
これは直前ってこと?
<xx><yy>111</yy></xx> にはマッチしないってことでいいの?
616デフォルトの名無しさん
2018/09/18(火) 07:55:40.50ID:lHFpavF+ >ただし取り出したいのはトップのxxで
これだけで<yy></yy>があろうがなかろうが良いと俺は思ったんだけど
これだけで<yy></yy>があろうがなかろうが良いと俺は思ったんだけど
617デフォルトの名無しさん
2018/09/18(火) 08:27:12.31ID:iA/s8q9i yyがどうでもよければ
<xx>(?:(?:<(?<tag>[a-z]+)>)*\d+(?:</(?<-tag>\k<tag>)>)*(?(tag)(?!)))*</xx>
かなぁ
<xx>(?:(?:<(?<tag>[a-z]+)>)*\d+(?:</(?<-tag>\k<tag>)>)*(?(tag)(?!)))*</xx>
かなぁ
618デフォルトの名無しさん
2018/09/18(火) 08:36:05.56ID:oqy73oSH619デフォルトの名無しさん
2018/09/18(火) 09:00:26.56ID:iA/s8q9i まぁスタック使う構文が必要な時点で正規表現向きでないのは間違いない
620583
2018/09/18(火) 12:56:18.97ID:t0fL3l18 本来の数学的な正規表現という意味では向いてる質問なんだけどね
これぞ正規表現の仕事っていう質問
でもプログラムの検索で使う正規表現ではなかなか使われないね
これぞ正規表現の仕事っていう質問
でもプログラムの検索で使う正規表現ではなかなか使われないね
621583
2018/09/18(火) 13:25:09.30ID:t0fL3l18622583
2018/09/18(火) 13:29:58.42ID:t0fL3l18 間違い
\A を <xx>
正しくは
\A を <xx> ・・・
\A を <xx>
正しくは
\A を <xx> ・・・
623583
2018/09/18(火) 18:51:49.51ID:t0fL3l18624583
2018/09/21(金) 05:18:40.73ID:LI7qokUP (?# 主要部)
<xx(?&Attribute)>(?&innerText)(?&roop)?+</xx>
(?# 定義部)
(?:|(?!)
(?'Attribute'(?:\s[^>]*+)?+)
(?'singletag'br)
(?'tagname'[a-z][a-z\d]*+)
(?'innerText'
(?: [^<]*+
| <(?&singletag)(?&Attribute)>
)*+
)
(?'roop'
<(?'tag'(?&tagname))(?&Attribute)>
(?&innerText)(?&roop)?+
</\k'tag+0'>
(?&innerText)(?&roop)?+
)
)
<xx(?&Attribute)>(?&innerText)(?&roop)?+</xx>
(?# 定義部)
(?:|(?!)
(?'Attribute'(?:\s[^>]*+)?+)
(?'singletag'br)
(?'tagname'[a-z][a-z\d]*+)
(?'innerText'
(?: [^<]*+
| <(?&singletag)(?&Attribute)>
)*+
)
(?'roop'
<(?'tag'(?&tagname))(?&Attribute)>
(?&innerText)(?&roop)?+
</\k'tag+0'>
(?&innerText)(?&roop)?+
)
)
625デフォルトの名無しさん
2018/09/21(金) 05:54:00.34ID:LI7qokUP こだわった点
・主要部と定義部に分けて全体の構造が分かりやすくした
・繰り返しは全て強欲。無駄なバックトラックをさせない
・再帰には * を使わず、部分呼び出し自身に繰り返しをさせている
・定義部は (?:|(?!) 〜 ) として定義部がサーチに使われるのを避けている
>>605には ([^<]*|\g<-3>)* という部分があって
([^<]*)* というバックトラック処理がえらいことになる部分があって気になった
あと再帰を使ってるのにループを * にさせているのを見て
* を使わずに書けるはずだと思って作ってみた
・主要部と定義部に分けて全体の構造が分かりやすくした
・繰り返しは全て強欲。無駄なバックトラックをさせない
・再帰には * を使わず、部分呼び出し自身に繰り返しをさせている
・定義部は (?:|(?!) 〜 ) として定義部がサーチに使われるのを避けている
>>605には ([^<]*|\g<-3>)* という部分があって
([^<]*)* というバックトラック処理がえらいことになる部分があって気になった
あと再帰を使ってるのにループを * にさせているのを見て
* を使わずに書けるはずだと思って作ってみた
626デフォルトの名無しさん
2018/09/21(金) 06:11:13.31ID:LI7qokUP こういう書き方をした正規表現をサクラエディタで使おうとすると
1行に繋げなければならない、これでは不便すぎる
鬼雲の強力な正規表現を快適に使い倒せるようにするべき
出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい
そうすればここのような掲示板に貼るときに便利
逆に1行で書かれた正規表現を複数行に直す機能も欲しい
手動でいちいち改行を入れる手間が省けて快適になる
この2つの機能は正規表現ライブラリに実装されることが望ましい
そうすれば他のテキストエディタの作者も気軽に実装出来るようになる
正規表現に新しいメタ文字が作られたときの対応も容易になる
1行に繋げなければならない、これでは不便すぎる
鬼雲の強力な正規表現を快適に使い倒せるようにするべき
出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい
そうすればここのような掲示板に貼るときに便利
逆に1行で書かれた正規表現を複数行に直す機能も欲しい
手動でいちいち改行を入れる手間が省けて快適になる
この2つの機能は正規表現ライブラリに実装されることが望ましい
そうすれば他のテキストエディタの作者も気軽に実装出来るようになる
正規表現に新しいメタ文字が作られたときの対応も容易になる
627デフォルトの名無しさん
2018/09/21(金) 06:18:04.46ID:LI7qokUP 出来れば定義用の新しいコマンドが欲しい
定義のためのカッコなのにキャプチャが有効になってたり、
正規表現オブジェクトが無駄に肥大化してしまったりするから
定義のためのカッコなのにキャプチャが有効になってたり、
正規表現オブジェクトが無駄に肥大化してしまったりするから
628デフォルトの名無しさん
2018/09/21(金) 07:17:48.30ID:fJq/snux629583
2018/09/21(金) 19:24:14.97ID:LI7qokUP >>628
テキストエディタの正規表現の入力ウインドウに付けて欲しいんだ
次世代のテキストエディタは↓こうなって欲しい
1、画面をいっぱいに使って正規表現の複数行の記述が出来る
2、複数行で書かれた正規表現を一行に繋げるボタン
3、一行で書かれた正規表現を複数行に展開するボタン
これがスタンダードになるといいな
テキストエディタの正規表現の入力ウインドウに付けて欲しいんだ
次世代のテキストエディタは↓こうなって欲しい
1、画面をいっぱいに使って正規表現の複数行の記述が出来る
2、複数行で書かれた正規表現を一行に繋げるボタン
3、一行で書かれた正規表現を複数行に展開するボタン
これがスタンダードになるといいな
630デフォルトの名無しさん
2018/09/21(金) 20:42:25.54ID:c6u7OXiZ >>629
ガンバ w
ガンバ w
631デフォルトの名無しさん
2018/09/21(金) 20:44:43.75ID:OGYiByDT やっぱそうなるよな ここではw
632デフォルトの名無しさん
2018/09/21(金) 23:08:38.86ID:3+OghnRP extendedフラグを付けて鬼雲に渡せば、複数行で処理してくれる。
エディタ側で1行にくっつけたりする必要はない。
エディタ側で1行にくっつけたりする必要はない。
633583
2018/09/21(金) 23:41:08.24ID:LI7qokUP634デフォルトの名無しさん
2018/09/22(土) 02:13:48.20ID:EPQO3h7N >>633
鬼雲とbregonig.dllの作者さんまでどうぞ
https://twitter.com/k_takata
https://github.com/k-takata/Onigmo
https://github.com/k-takata/bregonig
http://k-takata.o.oo7.jp/mysoft/bregonig.html
あと鬼車オリジナルの作者さんも復活してたんだね
https://github.com/kkos/oniguruma/issues
https://twitter.com/5chan_nel (5ch newer account)
鬼雲とbregonig.dllの作者さんまでどうぞ
https://twitter.com/k_takata
https://github.com/k-takata/Onigmo
https://github.com/k-takata/bregonig
http://k-takata.o.oo7.jp/mysoft/bregonig.html
あと鬼車オリジナルの作者さんも復活してたんだね
https://github.com/kkos/oniguruma/issues
https://twitter.com/5chan_nel (5ch newer account)
635583
2018/09/22(土) 21:31:53.89ID:SLHR4wJP >>634
bregonig.dllはプログラミング用のライブラリをテキストエディタでも
使えるようにしたっていう感じなのでプログラミングに必要のない機能は
付けたくないと思う、管理が大変になるからね
だから次世代の正規表現ライブラリと次世代のテキストエディタに期待
ちなみにテキストエディタに重きを置いたライブラリならこんなのが可能になるはず
検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'
対象テキスト: blue
置換結果:青
現状の bregonig.dll でこれが出来ないということはプログラミングでなんとかなる
機能は付けないということ
テキストエディタのほうは改行をまたぐマッチの実現に苦戦してるようで
この問題が解決しないと高度な正規表現は宝の持ち腐れになるだけなので
次世代のテキストエディタに期待しましょう
>鬼車オリジナルの作者さん
別人だとは知りませんでした^^;
bregonig.dllはプログラミング用のライブラリをテキストエディタでも
使えるようにしたっていう感じなのでプログラミングに必要のない機能は
付けたくないと思う、管理が大変になるからね
だから次世代の正規表現ライブラリと次世代のテキストエディタに期待
ちなみにテキストエディタに重きを置いたライブラリならこんなのが可能になるはず
検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'
対象テキスト: blue
置換結果:青
現状の bregonig.dll でこれが出来ないということはプログラミングでなんとかなる
機能は付けないということ
テキストエディタのほうは改行をまたぐマッチの実現に苦戦してるようで
この問題が解決しないと高度な正規表現は宝の持ち腐れになるだけなので
次世代のテキストエディタに期待しましょう
>鬼車オリジナルの作者さん
別人だとは知りませんでした^^;
636デフォルトの名無しさん
2018/09/26(水) 01:40:37.36ID:3FykrnoG xyz? を含まないものにマッチする正規表現
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXY
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ
> fmcat =(retofm
..のところで導かれている正規表現は明らかにxyやxyzを含む正規表現だけど
これは単なるミスなのかな?こんな難しいことをやってる人がこんなミスを
見逃すとはとても思えないから何か違うものなのかなぁ・・
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXY
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ
> fmcat =(retofm
..のところで導かれている正規表現は明らかにxyやxyzを含む正規表現だけど
これは単なるミスなのかな?こんな難しいことをやってる人がこんなミスを
見逃すとはとても思えないから何か違うものなのかなぁ・・
637デフォルトの名無しさん
2018/09/26(水) 03:09:00.10ID:Rr41G2Hg 明らかに含むって試してから言ってる?
638デフォルトの名無しさん
2018/09/26(水) 10:58:06.87ID:3FykrnoG >>637
> fmcat =(retofm
で始まる3行のところの正規表現についてですよ?
(〜)* x (〜)* yz の形なので明らかにxyzにマッチします
*y(x*[^xy]y*)*x* は誤植でしょうけど・・
> fmcat =(retofm
で始まる3行のところの正規表現についてですよ?
(〜)* x (〜)* yz の形なので明らかにxyzにマッチします
*y(x*[^xy]y*)*x* は誤植でしょうけど・・
639デフォルトの名無しさん
2018/09/26(水) 14:05:39.88ID:pN+YCTD5 あー確かににそこはおかしいな
引用っぽいけど
引用っぽいけど
640デフォルトの名無しさん
2018/09/26(水) 23:39:54.65ID:3FykrnoG やっぱり間違いなんですかね?
プログラムを使って自動的に算出してるようなのに・・
プログラムを使って自動的に算出してるようなのに・・
641デフォルトの名無しさん
2018/09/27(木) 00:18:43.29ID:0xNuoCxe 俺もわからんけど、prologらしいから、括弧や表記はスタック順になってるとかでは?
642デフォルトの名無しさん
2018/09/27(木) 02:58:15.53ID:TOnM2DUW >prolog
なるほど、"xyを含まない正規表現" のところに grail って書いてあったのは
prologとやらの実行ソフト名だったのか
https://github.com/RichardMoot/Grail
これの使い方を調べれば謎が解けそうですね
暇なときに試してみます、ありがとう
なるほど、"xyを含まない正規表現" のところに grail って書いてあったのは
prologとやらの実行ソフト名だったのか
https://github.com/RichardMoot/Grail
これの使い方を調べれば謎が解けそうですね
暇なときに試してみます、ありがとう
643デフォルトの名無しさん
2018/10/06(土) 17:50:41.16ID:0JYIRqz1 検索対象文字 <test>a="akari"desu</test>
正規表現 a="*"
で、検索結果が「a="akari"」でなく、「a="」しか取得できないのはなぜでしょうか?
正規表現 a="*"
で、検索結果が「a="akari"」でなく、「a="」しか取得できないのはなぜでしょうか?
644デフォルトの名無しさん
2018/10/06(土) 17:56:12.23ID:e52HQVrn 馬鹿には無理
645デフォルトの名無しさん
2018/10/06(土) 18:01:22.57ID:FAIH8E2E a=\".*\"
メタ文字(ダブルクォート)をバックスラシュでエスケープ
.(ピリオド)で任意文字で0文字以上(アスタリスク)をつければ
とりあえずイケル
それでも意図どおりにマッチングしないことは予見できる
メタ文字(ダブルクォート)をバックスラシュでエスケープ
.(ピリオド)で任意文字で0文字以上(アスタリスク)をつければ
とりあえずイケル
それでも意図どおりにマッチングしないことは予見できる
646デフォルトの名無しさん
2018/10/06(土) 18:14:31.01ID:OZkGL/sg ワイルドカードと混同しちゃってるのか
ワイルドカードと正規表現を同時に使えるTresGrepなら動くかも
ワイルドカードと正規表現を同時に使えるTresGrepなら動くかも
647デフォルトの名無しさん
2018/10/06(土) 18:16:35.11ID:OZkGL/sg 正規表現っぽいIDになった?
648デフォルトの名無しさん
2018/10/06(土) 18:23:52.49ID:OZkGL/sg OZk G L /sg
ohzakiさんゲームのリンク
な気がしたので貼る、最近更新したばっかりやん
ゲーム関係のリンク
http://www.din.or.jp/~ohzaki/game.htm
ohzakiさんゲームのリンク
な気がしたので貼る、最近更新したばっかりやん
ゲーム関係のリンク
http://www.din.or.jp/~ohzaki/game.htm
649デフォルトの名無しさん
2018/10/14(日) 12:53:05.30ID:zaukh1NH650デフォルトの名無しさん
2018/10/14(日) 14:33:15.06ID:eP/1gSav ちょいと質問させて
a="[^"]*"
と書くことが多いんだけど
a=".*?"
と書くのとで結果に違いでるのかな?
a="[^"]*"
と書くことが多いんだけど
a=".*?"
と書くのとで結果に違いでるのかな?
651デフォルトの名無しさん
2018/10/14(日) 14:56:27.64ID:EqzxaMkD ""のなかに改行が含まれてた場合、違いが出るよ
652デフォルトの名無しさん
2018/10/14(日) 15:11:22.83ID:zaukh1NH あと、.*?は使えない正規表現の処理系があるんじゃなかったっけか。詳しくは(ry
653デフォルトの名無しさん
2018/10/14(日) 15:27:34.24ID:eP/1gSav >>651-652
なるほど、ありがとうございました
なるほど、ありがとうございました
654デフォルトの名無しさん
2018/10/14(日) 22:51:29.78ID:yTLvFK6H 1、<test>a="[^\"]*"</test>
2、<test>a=".*?"</test>
この2つが↓これにどうマッチするか試してごらん
---------------------------------------------------------------------------
<test>a="pokemon"(^-^)</test> <test>a="doramon"</test>
----------------------------------------------------------------------------
2、<test>a=".*?"</test>
この2つが↓これにどうマッチするか試してごらん
---------------------------------------------------------------------------
<test>a="pokemon"(^-^)</test> <test>a="doramon"</test>
----------------------------------------------------------------------------
656デフォルトの名無しさん
2018/10/15(月) 00:13:04.80ID:fKW/Yset この誤爆のことに注意を払えているなら .*? で問題ないよ
[^"] はそういう心配をしなくて良くなるからこっちを予防的に使うのもあり
[^"] はそういう心配をしなくて良くなるからこっちを予防的に使うのもあり
657デフォルトの名無しさん
2018/10/15(月) 22:36:58.63ID:fKW/Yset # 文字列 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
);
$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:39.83ID:fKW/Yset # 文字列 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
);
$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:58.45ID:s3Db0e4D 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] を消せる、完成
左右対称形、後ろから読めば 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:36.85ID:s3Db0e4D こっちのほうがスマートだ..
# 状態遷移図から導かれる正規表現
([^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*
# 分岐ループを展開して完成
y*(x*[^xy]y*)x*
# 状態遷移図から導かれる正規表現
([^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*
# 分岐ループを展開して完成
y*(x*[^xy]y*)x*
661デフォルトの名無しさん
2018/10/20(土) 20:45:04.19ID:WB0b2hD6 (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)*)*)*$
# (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)*)*)*$
662デフォルトの名無しさん
2018/10/21(日) 19:43:06.22ID:7AODCPK7 (a|b|c|d)* の展開についての考察
a*(ba*)*{ca*(ba*)*}* の a は全て a* の形になっているのでこれを利用する
a を (a|d) に置き換えることで分岐を1つ増やす
(a|d)* = a*(da*)* なので a* を a*(da*)* に置き換えるだけで答えが求まる
a*(da*)*(ba*(da*)*)*(ca*(da*)*(ba*(da*)*)*)*
(a|b|c|d|f)* を求めたいときは同じように a* を置き換えるだけで求まる
このように a* は分岐を無限に増やす入り口のような役割をする
a*(ba*)*{ca*(ba*)*}* の a は全て a* の形になっているのでこれを利用する
a を (a|d) に置き換えることで分岐を1つ増やす
(a|d)* = a*(da*)* なので a* を a*(da*)* に置き換えるだけで答えが求まる
a*(da*)*(ba*(da*)*)*(ca*(da*)*(ba*(da*)*)*)*
(a|b|c|d|f)* を求めたいときは同じように a* を置き換えるだけで求まる
このように a* は分岐を無限に増やす入り口のような役割をする
663デフォルトの名無しさん
2018/10/21(日) 23:04:31.26ID:mkrTRrBN このスレで名前が挙がってたTresGrep、気が付いたらbregonig.dllにも対応してるじゃん
プルダウンのモード切替で.NETの正規表現と切り替えられるのもいい感じ
もうこれでサクラエディタのGrepはお役御免にできるかもしれない
なんだけど・・・rubyの正規表現が全部使えるわけじゃないのに
「鬼雲検索」
を名乗るのはどうなんだろう
プルダウンのモード切替で.NETの正規表現と切り替えられるのもいい感じ
もうこれでサクラエディタのGrepはお役御免にできるかもしれない
なんだけど・・・rubyの正規表現が全部使えるわけじゃないのに
「鬼雲検索」
を名乗るのはどうなんだろう
664662
2018/10/22(月) 01:40:50.08ID:oA8lJo/T2018/10/22(月) 07:15:14.86ID:nc1bV2B+
全角スペースを\u3000と書いた場合とか
bregonigだとperl互換じゃない書き方は受け入れてもらえないわけで
bregonigだとperl互換じゃない書き方は受け入れてもらえないわけで
666662
2018/10/22(月) 14:03:03.71ID:oA8lJo/T 自分は文字コードの知識が無いので迂闊なことは言えないから
ちょっと調べたことだけ書いておくね
ここで
http://k-takata.o.oo7.jp/mysoft/bregonig.html
\u0149 を検索してみるとbregonigでも使えてそうなことが書かれてたよ
ちょっと調べたことだけ書いておくね
ここで
http://k-takata.o.oo7.jp/mysoft/bregonig.html
\u0149 を検索してみるとbregonigでも使えてそうなことが書かれてたよ
667662
2018/10/22(月) 21:23:16.87ID:oA8lJo/T サクラエディタでいろいろ実験してたら \s が全角スペースにマッチした
サクラエディタ向けの正規表現を作るときには気を付けないといけないな
サクラエディタ向けの正規表現を作るときには気を付けないといけないな
668デフォルトの名無しさん
2018/10/22(月) 23:33:25.25ID:aIOUU5bU bregonigは鬼雲の機能限定版(perl互換の正規表現だけが動く)って話をどこかで読んだ記憶があったんだよね
どうせやるなら本家onigmoのRuby版正規表現も全部動くようにすればいいのに、って思っただけなんだ
ちょっと難癖に近いなとは自分でも思ってる
\sもそうだけど\dに全角数字がマッチしちゃって痛い目に合うのもまれによくあること
サクラに限らないんじゃないかね
どうせやるなら本家onigmoのRuby版正規表現も全部動くようにすればいいのに、って思っただけなんだ
ちょっと難癖に近いなとは自分でも思ってる
\sもそうだけど\dに全角数字がマッチしちゃって痛い目に合うのもまれによくあること
サクラに限らないんじゃないかね
669デフォルトの名無しさん
2018/10/23(火) 00:10:38.63ID:W9szHIq5 I/Fの問題だろう
Onigmoの仕様では、\sは
Unicode以外の場合:
\t, \n, \v, \f, \r, \x20
Unicodeの場合:
0009, 000A, 000B, 000C, 000D, 0085(NEL),
General_Category -- Line_Separator
-- Paragraph_Separator
-- Space_Separator
ASCII外の文字を含むかどうかは ONIG_OPTION_ASCII_RANGE オプションに依存する。
とある
実際、サクラエディタで試すと、
2028(LS),2029(PS),
0009,000a,000b,000c,000d,0085,
0020,00a0,1680,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,200a,202f,205f,3000(SS)
がマッチする
なので、サクラエディタはUnicodeで鬼雲を使ってると思われる
Janeの場合でも、StyleはSJISであり、XenoはUnicodeなので
https://egg.5ch.net/test/read.cgi/software/1536058236/515
に対して、\d{6}がマッチするのはXenoのみである
Onigmoの仕様では、\sは
Unicode以外の場合:
\t, \n, \v, \f, \r, \x20
Unicodeの場合:
0009, 000A, 000B, 000C, 000D, 0085(NEL),
General_Category -- Line_Separator
-- Paragraph_Separator
-- Space_Separator
ASCII外の文字を含むかどうかは ONIG_OPTION_ASCII_RANGE オプションに依存する。
とある
実際、サクラエディタで試すと、
2028(LS),2029(PS),
0009,000a,000b,000c,000d,0085,
0020,00a0,1680,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,200a,202f,205f,3000(SS)
がマッチする
なので、サクラエディタはUnicodeで鬼雲を使ってると思われる
Janeの場合でも、StyleはSJISであり、XenoはUnicodeなので
https://egg.5ch.net/test/read.cgi/software/1536058236/515
に対して、\d{6}がマッチするのはXenoのみである
670662
2018/10/23(火) 00:11:35.27ID:FESm7ID8 なるほど、dll からは ONIG_SYNTAX_PERL しか使えないから
ruby を使い慣れてる人にとっては歯がゆいと..
> \dに全角数字がマッチしちゃって
ですね〜、(?a) で防げるようなので覚えておきます
ruby を使い慣れてる人にとっては歯がゆいと..
> \dに全角数字がマッチしちゃって
ですね〜、(?a) で防げるようなので覚えておきます
671デフォルトの名無しさん
2018/10/23(火) 00:18:39.55ID:FESm7ID8672デフォルトの名無しさん
2018/10/23(火) 00:24:56.92ID:W9szHIq5 なおUnicodeの空白でも、上記のCc(0009〜0085)、LS,PS,Zs(Space Separator)
以外のCf(200b,200c,200d,FEFF)だとどうかなと試したが案の定マッチしなかった
さすがは仕様どおりだ
以外のCf(200b,200c,200d,FEFF)だとどうかなと試したが案の定マッチしなかった
さすがは仕様どおりだ
673デフォルトの名無しさん
2018/10/23(火) 01:02:05.21ID:FESm7ID8 > 200b,200c,200d,FEFF
サクラエディタにIMEパッドから打ち込んで試してみたら同じくマッチせず
# 主要部
(?&sp)
# 定義部
(|(?!)
(?<sp>
(?u)
[\x{200b}\x{200c}\x{200d}\x{FEFF}\s]
)
)
自分がこれ使うことは永遠になさそうだけどとりあえず..
サクラエディタにIMEパッドから打ち込んで試してみたら同じくマッチせず
# 主要部
(?&sp)
# 定義部
(|(?!)
(?<sp>
(?u)
[\x{200b}\x{200c}\x{200d}\x{FEFF}\s]
)
)
自分がこれ使うことは永遠になさそうだけどとりあえず..
674デフォルトの名無しさん
2018/10/23(火) 03:03:21.50ID:FESm7ID8675デフォルトの名無しさん
2018/10/25(木) 14:38:08.86ID:4OmhnPU0 あるファイルパスがありディレクトリのN階層目までのみを抽出したいのですが、正規表現について教えてください
例えばこんな入力のリストがある場合
aaa
aaa/bbb/ccc
aaa/bbb/ccc/ddd/eee/fff
で各リストに対して2階層目までを取得したい場合
aaa
aaa/bbb
aaa/bbb
となるのが期待値です。
((?:¥w+¥/?){1,2})とかしてみたんですが上手くいきませんでした、お手数ですがよろしくお願いします
例えばこんな入力のリストがある場合
aaa
aaa/bbb/ccc
aaa/bbb/ccc/ddd/eee/fff
で各リストに対して2階層目までを取得したい場合
aaa
aaa/bbb
aaa/bbb
となるのが期待値です。
((?:¥w+¥/?){1,2})とかしてみたんですが上手くいきませんでした、お手数ですがよろしくお願いします
676デフォルトの名無しさん
2018/10/25(木) 15:23:45.93ID:RdSksp9Y >>675
正規表現はプログラム言語や正規表現オブジェクトのオプションによって
動作がけっこう変化するので質問するときはそういうの書いてね
[^/]+(?:/[^/]+)?
ただしこれは正しいパスが与えられることを前提としているので注意
正規表現はプログラム言語や正規表現オブジェクトのオプションによって
動作がけっこう変化するので質問するときはそういうの書いてね
[^/]+(?:/[^/]+)?
ただしこれは正しいパスが与えられることを前提としているので注意
677デフォルトの名無しさん
2018/10/25(木) 15:29:23.12ID:ZE3NVml1 / の数が、0〜2
678デフォルトの名無しさん
2018/10/25(木) 15:39:26.06ID:5Cy/pQlU ./ で始まってたらどう数えるん
/ で始まってたら?
/ で始まってたら?
679デフォルトの名無しさん
2018/10/25(木) 17:47:09.80ID:4OmhnPU0 >>676
ありがとうございます、perlが希望でしたので次回から書くようにします
例は2階層で固定のようですが、ちなみにn階層目とか可変で書くような場合は下記のような感じで良いでしょうか?
[^/]+(?:/[^/]+){0,n-1}
ありがとうございます、perlが希望でしたので次回から書くようにします
例は2階層で固定のようですが、ちなみにn階層目とか可変で書くような場合は下記のような感じで良いでしょうか?
[^/]+(?:/[^/]+){0,n-1}
680デフォルトの名無しさん
2018/10/25(木) 18:40:41.61ID:RdSksp9Y ああ、N階層までのマッチという質問だったのか、ごめんね
それで合ってるよb
それで合ってるよb
681デフォルトの名無しさん
2018/10/26(金) 10:18:13.83ID:MwloQati 暇つぶしに鬼雲の再帰処理に欠陥がないか探してみたけど見つからなかった
例、\1 を空文字にマッチさせて再帰の無限ループを狙う
()(?<name>a|\1\g<name>c)
例2、<x> を複数使ってマッチするのが空文字ではないように見せかける
(?<x>)(?<x>text)(?<name>a|\g<x>\g<name>c)
例、\1 を空文字にマッチさせて再帰の無限ループを狙う
()(?<name>a|\1\g<name>c)
例2、<x> を複数使ってマッチするのが空文字ではないように見せかける
(?<x>)(?<x>text)(?<name>a|\g<x>\g<name>c)
682デフォルトの名無しさん
2018/10/26(金) 23:39:01.03ID:MwloQati ・perl 5.22
if ( "a" =~ /^\Fa\E$/ )
{ print "match.\n"; }
else
{ print "no.\n"; }
# 結果: match.
・ サクラエディタ + bregonig.dll (ONIG_SYNTAX_PERL)
検索欄: ^\Fa\E$
テキスト: a
結果: 見つかりませんでした
\F の意味が知りたい..
if ( "a" =~ /^\Fa\E$/ )
{ print "match.\n"; }
else
{ print "no.\n"; }
# 結果: match.
・ サクラエディタ + bregonig.dll (ONIG_SYNTAX_PERL)
検索欄: ^\Fa\E$
テキスト: a
結果: 見つかりませんでした
\F の意味が知りたい..
683デフォルトの名無しさん
2018/10/26(金) 23:58:52.37ID:MwloQati http://perldoc.jp/docs/perl/5.16.1/perlreref.pod#ESCAPE32SEQUENCES
> \F \E まで畳み込み文字にします
bregonig.dll は Perl 5.14 ほぼ準拠だからまだ未対応らしい
> \F \E まで畳み込み文字にします
bregonig.dll は Perl 5.14 ほぼ準拠だからまだ未対応らしい
■ このスレッドは過去ログ倉庫に格納されています