[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 17:48 / Filesize : 330 KB / Number-of Response : 1037
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Regular Expression(正規表現) Part14



1 名前:デフォルトの名無しさん [2017/03/15(水) 02:04:35.47 ID:e01p03UP.net]
Regular Expressionスレです。

質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。

前スレ
Regular Expression(正規表現) Part13
echo.2ch.net/test/read.cgi/tech/1415149975/


次スレは>>980宜しく
天ぷら等2以降

596 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 00:35:41.84 ID:I7tIpqHO.net]
底辺に行くほど知識自慢はしかたがないだろ、正規表現に限らず

ただ掲示板的に質問したいのにバカがしゃしゃり出てきて迷惑だよな

597 名前:デフォルトの名無しさん [2018/08/25(土) 10:52:22.58 ID:J+b/MRtJ.net]
的確な指示されても気に入らない回答だからと人の話を聴かない人は成長しないよ
自分の気に入る回答しかも自分と同じレベルの回答もらって喜んでればいい

598 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 15:08:37.66 ID:sCPJIsfv.net]
俺なんか中学の勉強もロクにしなかったのに正規表現を理解したいから
今、大学レベルの数学を勉強してる・・なかなか進まないけどね・・

>>558 の質問からパーサとか出てくるのはちょっと違うと思うよ
metaタグ拾えばいいだけだよね?難しく考えすぎだよ

あとHTMLソースのほうが糞で実際の文字コードとmetaタグで指定されてる
文字コードが違うなんてことや、文字コードの指定が複数個所あるなんていう
2ページ分のHTMLをそのままくっ付けましたなんていうのも稀にあるから
そういう糞なHTMLを相手にする場合は対応を考えないといけないね

599 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 15:31:19.41 ID:CE5Lnwmj.net]
>>581じゃあmetaタグを拾って来る正規表現をどうぞ

600 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 15:37:54.94 ID:zPuf2RGr.net]
え? そんなことマジで聞いてるのか?

601 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 15:40:08.95 ID:CE5Lnwmj.net]
マジだからちゃんと教えてくれよ

602 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:08:41.45 ID:sCPJIsfv.net]
自分用に作るならこんな感じかなぁ、動作確認してないので使わないでね

|
<meta (?=\s) [^<>]* \s charset \s* = \s* (?:["']\s*)? ([^\s"'<>;]+)
|x;

こういうのは想定外  ※  " " の中に > がある

<meta comment="a>b" charset="UTF-8">

603 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:17:10.61 ID:O4hA/SKg.net]
>>585
俺が書いた糞(>>561)より糞なコードが書かれて驚く
素直にパーサ使えよ

604 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:36:53.61 ID:sCPJIsfv.net]
>>585 のほうがスマートなのは一目瞭然でしょ
ただ >>585 は こんな感じ 程度のものなのでツッコミ所があっても知らないよ



605 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:37:23.43 ID:5oVMxLBv.net]
mataタグでのcharsetは定型的でしか使われないんで、仕様的に色々な場合に対応するのは無駄
俺が使うなら、こんなので十分
/<meta[^>]*\scharset=(["'])((?:(?!\1).)+)/i

606 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:52:21.33 ID:sCPJIsfv.net]
ほとんどの場合はそれで充分だろうねw

607 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 04:46:33.83 ID:2QlJLeh2.net]
マッチングテスト

[1] <meta charset="UTF-8">
>>559 1. 失敗
>>561   マッチ
>>585   マッチ
>>588   マッチ

[2] このスレのHTML
557 1. マッチ
559   失敗
583   マッチ
586   失敗

608 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 16:43:59.44 ID:4UnjToZE.net]
こんなバカが回答者してたのか
過去レス見ると前から張り付いてるようだね

609 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 20:05:36.75 ID:5NewXZva.net]
なかなか興味深い

鬼雲に非包含オペレータを実装した話
https://qiita.com/k-takata/items/4e45121081c83d3d5bfd

610 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 21:09:12.34 ID:5NewXZva.net]
bregonig.dll 2017/01/17 Ver.4.10 非包含オペレータに対応

うーん、非包含にマッチする正規表現はいつか自分で作れるように
なりたいと思ってたけど内部で勝手に作ってくれる時代になってしまったか〜

自分の知識は2013あたりで止まってるから浦島だ

611 名前:デフォルトの名無しさん mailto:sage [2018/09/01(土) 01:28:06.31 ID:0IlLcsWm.net]
ab(?~ba)ba

これを

ab((?!ba).)*ba

この従来通りの方式をベースに記述して、かつ、前者とまったく同じ
動作に書き直すことは可能かな?

両者の違いについては>>592のリンク参照

612 名前:デフォルトの名無しさん mailto:sage [2018/09/01(土) 22:17:13.09 ID:0IlLcsWm.net]
(?~abc)
これは↓とまったく同じ動作になると言って良さそう
(?:(?!abc).)*(?:(?=abc).{1,2})?

否定したい文字列が固定長なら先読みで書き換え可能らしい

613 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 19:47:12.85 ID:j29ToL0A.net]
正規表現を言語化できるようなとこ知りませんか?

/^ab/
これを入れると、

「abで始まる」
と変換されるようなサービスって無いでしょうか?

614 名前:デフォルトの名無しさん [2018/09/13(木) 09:47:15.83 ID:l9KSlvFS.net]
せっかく正規表現にした意味が無い



615 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 09:50:19.09 ID:NoauaeTl.net]
https://jex.im/regulex/#!flags=&re=%5Eab

616 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 13:28:20.78 ID:a9m+mGXQ.net]
視覚的に見れるサイトじゃなくて視覚的に作れるサイトがあったら便利かな
メタ文字を覚える必要が無くなるし動作を把握しながら作れる
そういうのが普及したらいいね

617 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 00:35:39.11 ID:qC9qAPWt.net]
そういうのとはちょっと違う&grepツールになっちゃうけど
TresGrepってのが入力欄でのマウス右クリックから正規表現を指定出来たり
正規表現1文字入力ごとにエラーチェック⇒NGならエラーメッセージを表示したりと
ちょっと便利

618 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 06:51:39.20 ID:LTbXVNEK.net]
>>598
これいいですね。
ありがとうございます。

619 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 14:14:58.44 ID:grBP2MzP.net]
TresGrep使ってみたけど良くできてる
正規表現に何かしらの思い入れがあるのが分かる気がする

特に正規表現の複数行入力が出来るのはいい
自分は複数行入力が当たり前になるべきだと前から考えていて
それが実装されててちょっと感動してしまった

620 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 12:06:03.62 ID:SR+usNFF.net]
C#、System.Text.RegularExpressions.Regexの正規表現で

xxの中を取り出すにはどうしたらいいのでしょう?
ただし取り出したいのはトップのxxで、xxが閉じる前にyyがあるときはそのxxは無視という条件付きです

対象文字列 "<xx><xx><yy>111</yy></xx></xx><xx>223</xx><xx>334</xx>";
試した正規表現 @"<xx>.*?[^(</yy>)]</xx>"

結果
 <xx><xx><yy>111</yy></xx></xx><xx>223</xx>
 <xx>334</xx>

欲しい結果
 <xx><xx><yy>111</yy></xx></xx>
 <xx>223</xx>
 <xx>334</xx>

621 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 13:51:51.89 ID:tNilsymD.net]
プログラムとはちょっと違うのですが、2chMateで荒らしをNGする正規表現を作りたくて悩んでます

日本語で書くと、

""又は"https://"が合わせてn回以上出てきた場合(対象は複数の改行を含む文字列)

にマッチするような正規表現って可能でしょうか?

622 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 14:52:47.98 ID:QtMg2HjE.net]
>>603
結果と欲しい結果の違いが改行しかないような

>>604
n=3
(?si:https?:\/\/.*?){3,}

623 名前:602 mailto:sage [2018/09/17(月) 15:04:16.06 ID:tNilsymD.net]
>>605
迅速なご回答ありがとうございます。
この方法でうまくいきました!

624 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 00:00:11.49 ID:lHFpavF+.net]
>>603
.NET Frameworkの正規表現は知らんけど、鬼雲でなら
(?=<xx>)(<(\w+)>([^<]*|\g<-3>)*</\k<-2-0>>)
これは最低限のものでイレギュラーなものには対応しない
  文字列でエスケープされてるとかコメントが入ってるとか
  タグにタグ名以外の余計なものが入ってるとか(</a href=...>とか<br />とか)
  ペアでないタグがあるとか(<br>のような単独タグ,<xx>と</xx>のどちらかしかないとか)
そういうのにも対応させるなら工夫して

一応、.NET Frameworkの正規表現の再帰については
https://qiita.com/HMMNRST/items/15800514bbe66f504789



625 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 00:12:00.46 ID:oPOmCM6y.net]
ありがと。もう少し単純にできるかと思っていたけどそんなに複雑になるのね
正規表現使わずにやる方向で考えてみます

626 名前:583 mailto:sage [2018/09/18(火) 00:55:53.38 ID:t0fL3l18.net]
>>607のリンク先見てやっつけで作ってみた

<xx>(?>(?:(?!</?xx>).)*)</xx>|<xx>((?'open'<xx>(?>(?:(?!</?xx>).)*))+(?'-open'</xx>(?>(?:(?!</?xx>).)*))+)*</xx>(?(open)(?!))

627 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 01:11:05.24 ID:0krUYS0m.net]
典型的なダメ質問者だな。

628 名前:583 mailto:sage [2018/09/18(火) 02:17:30.59 ID:t0fL3l18.net]
ミスってた、>>609はボツってことで・・
タグとタグの間の文字列の扱いが意外と難しい

629 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 06:08:34.66 ID:oPOmCM6y.net]
確かにダメ質問者w
「xxが閉じる前にyyがあるときはそのxxは無視」という一見簡単そうなルールが予想以上に難しいようで
楽したいから正規表現使いたいのだけどあまり複雑になると楽じゃないからほかに逃げたくなる

630 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 07:04:18.68 ID:iA/s8q9i.net]
ぶっちゃけ欲しい結果が何なのか結局よく分かってない

<xx>(?:(?<tag><(?!yy>)(?<tagname>[a-z]+)>)*\d+(?<-tag></\k<tagname>>)*(?(tag)(?!)))*</xx>

631 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 07:13:00.25 ID:oqy73oSH.net]
ID変わった
その表現だと <xx><xx><yy>111</yy></xx>
欲しい結果は<xx><xx><yy>111</yy></xx></xx>
こういう尻切れになることが多い

632 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 07:16:10.21 ID:iA/s8q9i.net]
どういうことよ
>>613の正規表現で <xx><xx><yy>111</yy></xx></xx><xx>223</xx><xx>334</xx> にマッチングすると

<xx>223</xx> と <xx>334</xx> にマッチするでしょ?
<xx><xx><yy>111</yy></xx> はどこから出てきたの?

633 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 07:42:45.15 ID:oqy73oSH.net]
申し訳ないミス。"<xx>.*?</xx>"の1件目の結果だったw
その正規表現だと2件マッチ
欲しい結果は>>603にある3件

634 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 07:46:54.65 ID:iA/s8q9i.net]
> xxが閉じる前にyyがあるときは
これは直前ってこと?
<xx><yy>111</yy></xx> にはマッチしないってことでいいの?



635 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 07:55:40.50 ID:lHFpavF+.net]
>ただし取り出したいのはトップのxxで
これだけで<yy></yy>があろうがなかろうが良いと俺は思ったんだけど

636 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 08:27:12.31 ID:iA/s8q9i.net]
yyがどうでもよければ
<xx>(?:(?:<(?<tag>[a-z]+)>)*\d+(?:</(?<-tag>\k<tag>)>)*(?(tag)(?!)))*</xx>
かなぁ

637 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 08:36:05.56 ID:oqy73oSH.net]
閉じる前というのは直前という意味で
対象が"<xx><xx><yy>111</yy></xx></xx><xx>223</xx><xx>334</xx><xx><yy>446</yy></xx>"
の場合は、<xx><yy>446</yy></xx>を無視したの3件マッチにしたい
>>613>>619ベースできそうだからがんばってみます。ありがとう

638 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 09:00:26.56 ID:iA/s8q9i.net]
まぁスタック使う構文が必要な時点で正規表現向きでないのは間違いない

639 名前:583 mailto:sage [2018/09/18(火) 12:56:18.97 ID:t0fL3l18.net]
本来の数学的な正規表現という意味では向いてる質問なんだけどね
これぞ正規表現の仕事っていう質問

でもプログラムの検索で使う正規表現ではなかなか使われないね

640 名前:583 mailto:sage [2018/09/18(火) 13:25:09.30 ID:t0fL3l18.net]
>>609を修正

<xx>(?>(?:(?!</?xx>).)*)((?'open'<xx>(?>(?:(?!</?xx>).)*))+(?'-open'</xx>(?>(?:(?!</?xx>).)*))+)*</xx>(?(open)(?!))

これは>>607のリンク先の例を↓のように書き換えただけ

< を <xx>・・・
> を </xx>・・・
\A を <xx>
\z を </xx>

「・・・」 は<xx>または</xx>の間に挟まれている文字列

>スタック使う構文が必要な時点で
ああ、その通りだ、(r+s+)+ だけでは作れない

641 名前:583 mailto:sage [2018/09/18(火) 13:29:58.42 ID:t0fL3l18.net]
間違い
\A を <xx>

正しくは
\A を <xx> ・・・

642 名前:583 mailto:sage [2018/09/18(火) 18:51:49.51 ID:t0fL3l18.net]
>>613のはミスってるね
<xx><b><a>111</a></a></xx> にマッチする
<xx><b><a>111</a></b></xx> にマッチしない
この問題は>>619で修正されてる

()* \d+ ()* のところが0回以上のループで正しく動くのは面白いな
一番外側の (?: )* はいらないかも

643 名前:583 mailto:sage [2018/09/21(金) 05:18:40.73 ID:LI7qokUP.net]
(?# 主要部)
<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)?+
)
)

644 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 05:54:00.34 ID:LI7qokUP.net]
こだわった点

・主要部と定義部に分けて全体の構造が分かりやすくした
・繰り返しは全て強欲。無駄なバックトラックをさせない
・再帰には * を使わず、部分呼び出し自身に繰り返しをさせている
・定義部は (?:|(?!) 〜 ) として定義部がサーチに使われるのを避けている

>>607には ([^<]*|\g<-3>)* という部分があって
([^<]*)* というバックトラック処理がえらいことになる部分があって気になった

あと再帰を使ってるのにループを * にさせているのを見て
* を使わずに書けるはずだと思って作ってみた



645 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 06:11:13.31 ID:LI7qokUP.net]
こういう書き方をした正規表現をサクラエディタで使おうとすると
1行に繋げなければならない、これでは不便すぎる
鬼雲の強力な正規表現を快適に使い倒せるようにするべき

出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい
そうすればここのような掲示板に貼るときに便利
 逆に1行で書かれた正規表現を複数行に直す機能も欲しい
手動でいちいち改行を入れる手間が省けて快適になる

この2つの機能は正規表現ライブラリに実装されることが望ましい
そうすれば他のテキストエディタの作者も気軽に実装出来るようになる
正規表現に新しいメタ文字が作られたときの対応も容易になる

646 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 06:18:04.46 ID:LI7qokUP.net]
出来れば定義用の新しいコマンドが欲しい

定義のためのカッコなのにキャプチャが有効になってたり、
正規表現オブジェクトが無駄に肥大化してしまったりするから

647 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 07:17:48.30 ID:fJq/snux.net]
>>628
> 出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい
ここはム板なので言い出しっぺの法則が適用されます

648 名前:583 mailto:sage [2018/09/21(金) 19:24:14.97 ID:LI7qokUP.net]
>>630
テキストエディタの正規表現の入力ウインドウに付けて欲しいんだ
次世代のテキストエディタは↓こうなって欲しい

1、画面をいっぱいに使って正規表現の複数行の記述が出来る
2、複数行で書かれた正規表現を一行に繋げるボタン
3、一行で書かれた正規表現を複数行に展開するボタン

これがスタンダードになるといいな

649 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 20:42:25.54 ID:c6u7OXiZ.net]
>>631
ガンバ w

650 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 20:44:43.75 ID:OGYiByDT.net]
やっぱそうなるよな ここではw

651 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 23:08:38.86 ID:3+OghnRP.net]
extendedフラグを付けて鬼雲に渡せば、複数行で処理してくれる。
エディタ側で1行にくっつけたりする必要はない。

652 名前:583 mailto:sage [2018/09/21(金) 23:41:08.24 ID:LI7qokUP.net]
>>634
そういうことじゃないんだな、>>628を読んでね

ちなみに複数行の正規表現を一行に繋げるのはかなり簡単なんだけど
一行で書かれた正規表現を複数行に展開するのはかなり難しい
正規表現のパーサを作るということになるから

だから正規表現ライブラリに実装されることが望ましい
ライブラリの作者なら細かい挙動まで把握しているから正確なパーサが作れる

逆にテキストエディタの作者がやろうとすると動作を把握しきれずに
不完全なものになったり、実装を諦めたりすることになりかねない
複数行をスタンダードにするためにはライブラリ側での実装が必須となる

653 名前:デフォルトの名無しさん [2018/09/22(土) 02:13:48.20 ID:EPQO3h7N.net]
>>635
鬼雲とbregonig.dllの作者さんまでどうぞ
https://twitter.com/k_takata
https://github.com/k-takata/Onigmo
https://github.com/k-takata/bregonig
k-takata.o.oo7.jp/mysoft/bregonig.html

あと鬼車オリジナルの作者さんも復活してたんだね
https://github.com/kkos/oniguruma/issues
(deleted an unsolicited ad)

654 名前:583 mailto:sage [2018/09/22(土) 21:31:53.89 ID:SLHR4wJP.net]
>>636
bregonig.dllはプログラミング用のライブラリをテキストエディタでも
使えるようにしたっていう感じなのでプログラミングに必要のない機能は
付けたくないと思う、管理が大変になるからね
だから次世代の正規表現ライブラリと次世代のテキストエディタに期待

ちなみにテキストエディタに重きを置いたライブラリならこんなのが可能になるはず

検索:( red(?'color='赤) | blue(?'color='青) | yellow(?'color='黄) )
置換:\k'color'

対象テキスト: blue
置換結果:青

現状の bregonig.dll でこれが出来ないということはプログラミングでなんとかなる
機能は付けないということ

テキストエディタのほうは改行をまたぐマッチの実現に苦戦してるようで
この問題が解決しないと高度な正規表現は宝の持ち腐れになるだけなので
次世代のテキストエディタに期待しましょう

>鬼車オリジナルの作者さん
別人だとは知りませんでした^^;



655 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 01:40:37.36 ID:3FykrnoG.net]
xyz? を含まないものにマッチする正規表現
www.din.or.jp/~ohzaki/regex.htm#WithoutXY
www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ

> fmcat =(retofm

..のところで導かれている正規表現は明らかにxyやxyzを含む正規表現だけど
これは単なるミスなのかな?こんな難しいことをやってる人がこんなミスを
見逃すとはとても思えないから何か違うものなのかなぁ・・

656 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 03:09:00.10 ID:Rr41G2Hg.net]
明らかに含むって試してから言ってる?

657 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 10:58:06.87 ID:3FykrnoG.net]
>>639
> fmcat =(retofm
で始まる3行のところの正規表現についてですよ?
(〜)* x (〜)* yz の形なので明らかにxyzにマッチします

*y(x*[^xy]y*)*x* は誤植でしょうけど・・

658 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 14:05:39.88 ID:pN+YCTD5.net]
あー確かににそこはおかしいな
引用っぽいけど

659 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 23:39:54.65 ID:3FykrnoG.net]
やっぱり間違いなんですかね?
プログラムを使って自動的に算出してるようなのに・・

660 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 00:18:43.29 ID:0xNuoCxe.net]
俺もわからんけど、prologらしいから、括弧や表記はスタック順になってるとかでは?

661 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 02:58:15.53 ID:TOnM2DUW.net]
>prolog
なるほど、"xyを含まない正規表現" のところに grail って書いてあったのは
prologとやらの実行ソフト名だったのか
https://github.com/RichardMoot/Grail

これの使い方を調べれば謎が解けそうですね
暇なときに試してみます、ありがとう

662 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 17:50:41.16 ID:0JYIRqz1.net]
検索対象文字 <test>a="akari"desu</test>

正規表現 a="*"

で、検索結果が「a="akari"」でなく、「a="」しか取得できないのはなぜでしょうか?

663 名前:デフォルトの名無しさん [2018/10/06(土) 17:56:12.23 ID:e52HQVrn.net]
馬鹿には無理

664 名前:デフォルトの名無しさん [2018/10/06(土) 18:01:22.57 ID:FAIH8E2E.net]
a=\".*\"

メタ文字(ダブルクォート)をバックスラシュでエスケープ
.(ピリオド)で任意文字で0文字以上(アスタリスク)をつければ
とりあえずイケル

それでも意図どおりにマッチングしないことは予見できる



665 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 18:14:31.01 ID:OZkGL/sg.net]
ワイルドカードと混同しちゃってるのか
ワイルドカードと正規表現を同時に使えるTresGrepなら動くかも

666 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 18:16:35.11 ID:OZkGL/sg.net]
正規表現っぽいIDになった?

667 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 18:23:52.49 ID:OZkGL/sg.net]
OZk   G    L     /sg
ohzakiさんゲームのリンク

な気がしたので貼る、最近更新したばっかりやん

ゲーム関係のリンク
www.din.or.jp/~ohzaki/game.htm

668 名前:デフォルトの名無しさん [2018/10/14(日) 12:53:05.30 ID:zaukh1NH.net]
>>645
ワロタw
正規表現の*とワイルドカードは違うぞ。詳しくはググれ。

多分a="[^"]*"でいけると思うけど詳しくはググれ。

669 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 14:33:15.06 ID:eP/1gSav.net]
ちょいと質問させて
a="[^"]*"
と書くことが多いんだけど
a=".*?"
と書くのとで結果に違いでるのかな? <

670 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 14:56:27.64 ID:EqzxaMkD.net]
""のなかに改行が含まれてた場合、違いが出るよ

671 名前:デフォルトの名無しさん [2018/10/14(日) 15:11:22.83 ID:zaukh1NH.net]
あと、.*?は使えない正規表現の処理系があるんじゃなかったっけか。詳しくは(ry

672 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 15:27:34.24 ID:eP/1gSav.net]
>>653-654
なるほど、ありがとうございました

673 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 22:51:29.78 ID:yTLvFK6H.net]
1、<test>a="[^\"]*"</test>
2、<test>a=".*?"</test>

この2つが↓これにどうマッチするか試してごらん
---------------------------------------------------------------------------
<test>a="pokemon"(^-^)</test> <test>a="doramon"</test>
----------------------------------------------------------------------------

674 名前:650 mailto:sage [2018/10/14(日) 23:38:50.12 ID:wMwKNjnw.net]
>>656
サンプルありがとう
でも、そういった検索/置換対象の場合だったら .*? は最初から考えないとは思う



675 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 00:13:04.80 ID:fKW/Yset.net]
この誤爆のことに注意を払えているなら .*? で問題ないよ
[^"] はそういう心配をしなくて良くなるからこっちを予防的に使うのもあり

676 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 22:36:58.63 ID:fKW/Yset.net]
# 文字列 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
);

677 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 22:37:39.83 ID:fKW/Yset.net]
# 文字列 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
);

678 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 14:54:58.45 ID:s3Db0e4D.net]
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] を消せる、完成

679 名前:デフォルトの名無しさん mailto:sage [2018/10/18(木) 23:54:36.85 ID:s3Db0e4D.net]
こっちのほうがスマートだ..

# 状態遷移図から導かれる正規表現
([^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*

680 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 20:45:04.19 ID:WB0b2hD6.net]
(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)*)*)*$

681 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 19:43:06.22 ID:7AODCPK7.net]
(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* は分岐を無限に増やす入り口のような役割をする

682 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 23:04:31.26 ID:mkrTRrBN.net]
このスレで名前が挙がってたTresGrep、気が付いたらbregonig.dllにも対応してるじゃん
プルダウンのモード切替で.NETの正規表現と切り替えられるのもいい感じ
もうこれでサクラエディタのGrepはお役御免にできるかもしれない

なんだけど・・・rubyの正規表現が全部使えるわけじゃないのに
「鬼雲検索」
を名乗るのはどうなんだろう

683 名前:662 mailto:sage [2018/10/22(月) 01:40:50.08 ID:oA8lJo/T.net]
>>665
ちょろっと試してみたけど戻り読みも後方参照も再帰もちゃんと動いたよ?
動かないのがあるならこちらで検証するよ〜

684 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2018/10/22(月) 07:15:14.86 ID:nc1bV2B+.net]
全角スペースを\u3000と書いた場合とか
bregonigだとperl互換じゃない書き方は受け入れてもらえないわけで



685 名前:662 mailto:sage [2018/10/22(月) 14:03:03.71 ID:oA8lJo/T.net]
自分は文字コードの知識が無いので迂闊なことは言えないから
ちょっと調べたことだけ書いておくね

ここで
k-takata.o.oo7.jp/mysoft/bregonig.html
\u0149 を検索してみるとbregonigでも使えてそうなことが書かれてたよ

686 名前:662 mailto:sage [2018/10/22(月) 21:23:16.87 ID:oA8lJo/T.net]
サクラエディタでいろいろ実験してたら \s が全角スペースにマッチした
サクラエディタ向けの正規表現を作るときには気を付けないといけないな

687 名前:デフォルトの名無しさん mailto:sage [2018/10/22(月) 23:33:25.25 ID:aIOUU5bU.net]
bregonigは鬼雲の機能限定版(perl互換の正規表現だけが動く)って話をどこかで読んだ記憶があったんだよね
どうせやるなら本家onigmoのRuby版正規表現も全部動くようにすればいいのに、って思っただけなんだ
ちょっと難癖に近いなとは自分でも思ってる

\sもそうだけど\dに全角数字がマッチしちゃって痛い目に合うのもまれによくあること
サクラに限らないんじゃないかね

688 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 00:10:38.63 ID:W9szHIq5.net]
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のみである

689 名前:662 mailto:sage [2018/10/23(火) 00:11:35.27 ID:FESm7ID8.net]
なるほど、dll からは ONIG_SYNTAX_PERL しか使えないから
ruby を使い慣れてる人にとっては歯がゆいと..

> \dに全角数字がマッチしちゃって
ですね〜、(?a) で防げるようなので覚えておきます

690 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 00:18:39.55 ID:FESm7ID8.net]
レスが被ってしまった..

>>671
ありがとうございます
サクラエディタはUnicode仕様で動いているんですね
う〜ん、文字コードの話は難しいなぁ

691 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 00:24:56.92 ID:W9szHIq5.net]
なおUnicodeの空白でも、上記のCc(0009〜0085)、LS,PS,Zs(Space Separator)
以外のCf(200b,200c,200d,FEFF)だとどうかなと試したが案の定マッチしなかった
さすがは仕様どおりだ

692 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 01:02:05.21 ID:FESm7ID8.net]
> 200b,200c,200d,FEFF

サクラエディタにIMEパッドから打ち込んで試してみたら同じくマッチせず

# 主要部
(?&sp)
# 定義部
(|(?!)
(?<sp>
(?u)
[\x{200b}\x{200c}\x{200d}\x{FEFF}\s]
)
)

自分がこれ使うことは永遠になさそうだけどとりあえず..

693 名前:デフォルトの名無しさん mailto:sage [2018/10/23(火) 03:03:21.50 ID:FESm7ID8.net]
>>3
ジオから移転

正規表現パズル
https://oraclesqlpuzzle.ninja-web.net/regex/index.html

694 名前:デフォルトの名無しさん [2018/10/25(木) 14:38:08.86 ID:4OmhnPU0.net]
あるファイルパスがありディレクトリのN階層目までのみを抽出したいのですが、正規表現について教えてください

例えばこんな入力のリストがある場合
aaa
aaa/bbb/ccc
aaa/bbb/ccc/ddd/eee/fff
で各リストに対して2階層目までを取得したい場合
aaa
aaa/bbb
aaa/bbb
となるのが期待値です。

((?:¥w+¥/?){1,2})とかしてみたんですが上手くいきませんでした、お手数ですがよろしくお願いします



695 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 15:23:45.93 ID:RdSksp9Y.net]
>>677
正規表現はプログラム言語や正規表現オブジェクトのオプションによって
動作がけっこう変化するので質問するときはそういうの書いてね

[^/]+(?:/[^/]+)?

ただしこれは正しいパスが与えられることを前提としているので注意

696 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 15:29:23.12 ID:ZE3NVml1.net]
/ の数が、0〜2






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<330KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef