Regular Expression(正規表現) Part14 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/03/15(水) 02:04:35.47ID:e01p03UP
Regular Expressionスレです。

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

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


次スレは>>980宜しく
天ぷら等2以降
2018/08/12(日) 21:30:40.27ID:mMH07JtW
>>556
HTMLは扱いが難しいからパーサ使った方がいい
どうしても正規表現だというなら,

1. とりあえず的な修正
https://regex101.com/r/sIUmzD/2
/<[^>]*\bcharset\s*=\s*(?:([^\s"'=><`]+)|'([^']*)'|"([^"]*)")\b/$1$2$3/i

2. もう少し気合の入れた修正
https://regex101.com/r/sIUmzD/1
|<meta
(?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*
(?:\s+charset(?:\s*=\s*(?:([^\s"'=><`]+)|'([^']*)'|"([^"]*)"))?)
(?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*\s*/?>|$1$2$3|i

ぐらいか
でもこれ後で読むのしんどいでしょ
2018/08/12(日) 21:47:08.19ID:L571MbNB
>>557
神だ
559557
垢版 |
2018/08/12(日) 21:53:09.85ID:mMH07JtW
2.の方を若干修正, charsetには値が必要ですわ
https://regex101.com/r/sIUmzD/3
|<meta
(?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*
(?:\s+charset\s*=\s*(?:([^\s"'=><`]+)|'([^']*)'|"([^"]*)"))
(?:\s+[^\s"'>/=]+(?:\s*=\s*(?:[^\s"'=><`]+|'[^']*'|"[^"]*"))?)*\s*/?>|$1$2$3|i
2018/08/12(日) 22:00:37.17ID:MOc1ccj1
>>557
ありがとうございます!
当方がやりたかったことは、HTMLをテキストデータとして大量に取得して、その中から特定のワードでの絞り込みです。
正しい文字コードでHTMLを落としてからパースしようと思ったのですが、確かにパーサでやる手もありそうですね

正規表現は今まで避けてきたので、読むのがシンドイっていうかチンプンカンプンですが
求めていた動作です。とても助かりました。
使わせてももらいます。ありがとうございました。
2018/08/12(日) 23:56:24.69ID:2UQfVx23
HTML のように、要素に親子関係があるもの・構造化されたものは、正規表現じゃ無理

<1><x></x><y></y></1>

開き・閉じタグで、前から一致させると、
<1></x> が対応してしまう

ネストも無限にできるから、対応させるのは無理。
パーサを使うべき
2018/08/13(月) 00:16:51.60ID:06GD6VnQ
キーワードと構成次第だろ
2018/08/13(月) 00:22:13.35ID:LXDaPxOa
rubyキチやぞ
2018/08/13(月) 03:34:58.19ID:EnLsbSTB
>>561
一部の環境では括弧等のネスト構造を取り扱いをサポートした正規表現があるよ
PCRE(Perl 5.10以降)やruby(鬼雲)、Python,PHPなどでも
C#の.NET Framework環境でもあったんじゃないかな
2018/08/23(木) 19:11:59.52ID:4kav5HXR
.*
何にでもマッチさせることができる最強で万能な正規表現
2018/08/23(木) 19:26:33.22ID:FR6Db0Vc
改行にはマッチしないけどね
[\s\S]*
2018/08/24(金) 02:29:36.02ID:cgE41D9D
>>561
> HTML のように、要素に親子関係があるもの・構造化されたものは、正規表現じゃ無理

そういうこともできるように拡張した正規表現があればいいのに
さらに階層、treeも可
2018/08/24(金) 03:56:55.93ID:k/tOxHF9
>>567
鬼雲使ってみれば?
2018/08/24(金) 10:28:37.49ID:bF2ATmvV
BNF使えよ
2018/08/24(金) 10:38:07.25ID:wb3Q/jKx
なんか知識が数年前で止まっちゃってる人がちらほらいるな
正規表現がネストに対応したのなんてもう一昔前ってイメージだけど
2018/08/24(金) 12:46:08.34ID:srP6ovAZ
別に正規表現だけを追いかけてるわけじゃないから
572デフォルトの名無しさん
垢版 |
2018/08/24(金) 12:48:35.65ID:ZVlysGry
なんでも正規表現で済まそうとするひとって
意地でもVBA使い続けてるひとと大差ない
2018/08/24(金) 12:49:36.87ID:yKVFr0CJ
適材適所
2018/08/24(金) 16:58:29.09ID:k/tOxHF9
>>567
てか>>561には>>564のレスが既に付いてたじゃんか
2018/08/24(金) 18:58:08.09ID:wb3Q/jKx
>>572
賢い人程手段をたくさん知り
その中から取捨選択するからな

>>571
さすがに勉強不足すぎだろw
何年前で知識止まってんだよ
2018/08/25(土) 00:03:35.46ID:r5O9PJUC
はいはい、正規表現マスターすごいねー

これでいいかな w
2018/08/25(土) 00:35:41.84ID:I7tIpqHO
底辺に行くほど知識自慢はしかたがないだろ、正規表現に限らず

ただ掲示板的に質問したいのにバカがしゃしゃり出てきて迷惑だよな
578デフォルトの名無しさん
垢版 |
2018/08/25(土) 10:52:22.58ID:J+b/MRtJ
的確な指示されても気に入らない回答だからと人の話を聴かない人は成長しないよ
自分の気に入る回答しかも自分と同じレベルの回答もらって喜んでればいい
2018/08/26(日) 15:08:37.66ID:sCPJIsfv
俺なんか中学の勉強もロクにしなかったのに正規表現を理解したいから
今、大学レベルの数学を勉強してる・・なかなか進まないけどね・・

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

あとHTMLソースのほうが糞で実際の文字コードとmetaタグで指定されてる
文字コードが違うなんてことや、文字コードの指定が複数個所あるなんていう
2ページ分のHTMLをそのままくっ付けましたなんていうのも稀にあるから
そういう糞なHTMLを相手にする場合は対応を考えないといけないね
2018/08/26(日) 15:31:19.41ID:CE5Lnwmj
>>579じゃあmetaタグを拾って来る正規表現をどうぞ
2018/08/26(日) 15:37:54.94ID:zPuf2RGr
え? そんなことマジで聞いてるのか?
2018/08/26(日) 15:40:08.95ID:CE5Lnwmj
マジだからちゃんと教えてくれよ
2018/08/26(日) 18:08:41.45ID:sCPJIsfv
自分用に作るならこんな感じかなぁ、動作確認してないので使わないでね

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

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

<meta comment="a>b" charset="UTF-8">
2018/08/26(日) 18:17:10.61ID:O4hA/SKg
>>583
俺が書いた糞(>>559)より糞なコードが書かれて驚く
素直にパーサ使えよ
2018/08/26(日) 18:36:53.61ID:sCPJIsfv
>>583 のほうがスマートなのは一目瞭然でしょ
ただ >>583 は こんな感じ 程度のものなのでツッコミ所があっても知らないよ
2018/08/26(日) 18:37:23.43ID:5oVMxLBv
mataタグでのcharsetは定型的でしか使われないんで、仕様的に色々な場合に対応するのは無駄
俺が使うなら、こんなので十分
/<meta[^>]*\scharset=(["'])((?:(?!\1).)+)/i
2018/08/26(日) 18:52:21.33ID:sCPJIsfv
ほとんどの場合はそれで充分だろうねw
2018/08/27(月) 04:46:33.83ID:2QlJLeh2
マッチングテスト

[1] <meta charset="UTF-8">
>>557 1. 失敗
>>559   マッチ
>>583   マッチ
>>586   マッチ

[2] このスレのHTML
557 1. マッチ
559   失敗
583   マッチ
586   失敗
2018/08/29(水) 16:43:59.44ID:4UnjToZE
こんなバカが回答者してたのか
過去レス見ると前から張り付いてるようだね
2018/08/31(金) 20:05:36.75ID:5NewXZva
なかなか興味深い

鬼雲に非包含オペレータを実装した話
https://qiita.com/k-takata/items/4e45121081c83d3d5bfd
2018/08/31(金) 21:09:12.34ID:5NewXZva
bregonig.dll 2017/01/17 Ver.4.10 非包含オペレータに対応

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

自分の知識は2013あたりで止まってるから浦島だ
2018/09/01(土) 01:28:06.31ID:0IlLcsWm
ab(?~ba)ba

これを

ab((?!ba).)*ba

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

両者の違いについては>>590のリンク参照
2018/09/01(土) 22:17:13.09ID:0IlLcsWm
(?~abc)
これは↓とまったく同じ動作になると言って良さそう
(?:(?!abc).)*(?:(?=abc).{1,2})?

否定したい文字列が固定長なら先読みで書き換え可能らしい
2018/09/12(水) 19:47:12.85ID:j29ToL0A
正規表現を言語化できるようなとこ知りませんか?

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

「abで始まる」
と変換されるようなサービスって無いでしょうか?
595デフォルトの名無しさん
垢版 |
2018/09/13(木) 09:47:15.83ID:l9KSlvFS
せっかく正規表現にした意味が無い
2018/09/13(木) 09:50:19.09ID:NoauaeTl
https://jex.im/regulex/#!flags=&;re=%5Eab
2018/09/13(木) 13:28:20.78ID:a9m+mGXQ
視覚的に見れるサイトじゃなくて視覚的に作れるサイトがあったら便利かな
メタ文字を覚える必要が無くなるし動作を把握しながら作れる
そういうのが普及したらいいね
2018/09/14(金) 00:35:39.11ID:qC9qAPWt
そういうのとはちょっと違う&grepツールになっちゃうけど
TresGrepってのが入力欄でのマウス右クリックから正規表現を指定出来たり
正規表現1文字入力ごとにエラーチェック⇒NGならエラーメッセージを表示したりと
ちょっと便利
2018/09/14(金) 06:51:39.20ID:LTbXVNEK
>>596
これいいですね。
ありがとうございます。
2018/09/14(金) 14:14:58.44ID:grBP2MzP
TresGrep使ってみたけど良くできてる
正規表現に何かしらの思い入れがあるのが分かる気がする

特に正規表現の複数行入力が出来るのはいい
自分は複数行入力が当たり前になるべきだと前から考えていて
それが実装されててちょっと感動してしまった
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>
2018/09/17(月) 13:51:51.89ID:tNilsymD
プログラムとはちょっと違うのですが、2chMateで荒らしをNGする正規表現を作りたくて悩んでます

日本語で書くと、

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

にマッチするような正規表現って可能でしょうか?
2018/09/17(月) 14:52:47.98ID:QtMg2HjE
>>601
結果と欲しい結果の違いが改行しかないような

>>602
n=3
(?si:https?:\/\/.*?){3,}
604602
垢版 |
2018/09/17(月) 15:04:16.06ID:tNilsymD
>>603
迅速なご回答ありがとうございます。
この方法でうまくいきました!
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
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)(?!))
2018/09/18(火) 01:11:05.24ID:0krUYS0m
典型的なダメ質問者だな。
609583
垢版 |
2018/09/18(火) 02:17:30.59ID:t0fL3l18
ミスってた、>>607はボツってことで・・
タグとタグの間の文字列の扱いが意外と難しい
2018/09/18(火) 06:08:34.66ID:oPOmCM6y
確かにダメ質問者w
「xxが閉じる前にyyがあるときはそのxxは無視」という一見簡単そうなルールが予想以上に難しいようで
楽したいから正規表現使いたいのだけどあまり複雑になると楽じゃないからほかに逃げたくなる
2018/09/18(火) 07:04:18.68ID:iA/s8q9i
ぶっちゃけ欲しい結果が何なのか結局よく分かってない

<xx>(?:(?<tag><(?!yy>)(?<tagname>[a-z]+)>)*\d+(?<-tag></\k<tagname>>)*(?(tag)(?!)))*</xx>
2018/09/18(火) 07:13:00.25ID:oqy73oSH
ID変わった
その表現だと <xx><xx><yy>111</yy></xx>
欲しい結果は<xx><xx><yy>111</yy></xx></xx>
こういう尻切れになることが多い
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> はどこから出てきたの?
2018/09/18(火) 07:42:45.15ID:oqy73oSH
申し訳ないミス。"<xx>.*?</xx>"の1件目の結果だったw
その正規表現だと2件マッチ
欲しい結果は>>601にある3件
2018/09/18(火) 07:46:54.65ID:iA/s8q9i
> xxが閉じる前にyyがあるときは
これは直前ってこと?
<xx><yy>111</yy></xx> にはマッチしないってことでいいの?
2018/09/18(火) 07:55:40.50ID:lHFpavF+
>ただし取り出したいのはトップのxxで
これだけで<yy></yy>があろうがなかろうが良いと俺は思ったんだけど
2018/09/18(火) 08:27:12.31ID:iA/s8q9i
yyがどうでもよければ
<xx>(?:(?:<(?<tag>[a-z]+)>)*\d+(?:</(?<-tag>\k<tag>)>)*(?(tag)(?!)))*</xx>
かなぁ
2018/09/18(火) 08:36:05.56ID:oqy73oSH
閉じる前というのは直前という意味で
対象が"<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ベースできそうだからがんばってみます。ありがとう
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:t0fL3l18
>>607を修正

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

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

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

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

>スタック使う構文が必要な時点で
ああ、その通りだ、(r+s+)+ だけでは作れない
622583
垢版 |
2018/09/18(火) 13:29:58.42ID:t0fL3l18
間違い
\A を <xx>

正しくは
\A を <xx> ・・・
623583
垢版 |
2018/09/18(火) 18:51:49.51ID:t0fL3l18
>>611のはミスってるね
<xx><b><a>111</a></a></xx> にマッチする
<xx><b><a>111</a></b></xx> にマッチしない
この問題は>>617で修正されてる

()* \d+ ()* のところが0回以上のループで正しく動くのは面白いな
一番外側の (?: )* はいらないかも
624583
垢版 |
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)?+
)
)
2018/09/21(金) 05:54:00.34ID:LI7qokUP
こだわった点

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

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

あと再帰を使ってるのにループを * にさせているのを見て
* を使わずに書けるはずだと思って作ってみた
2018/09/21(金) 06:11:13.31ID:LI7qokUP
こういう書き方をした正規表現をサクラエディタで使おうとすると
1行に繋げなければならない、これでは不便すぎる
鬼雲の強力な正規表現を快適に使い倒せるようにするべき

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

この2つの機能は正規表現ライブラリに実装されることが望ましい
そうすれば他のテキストエディタの作者も気軽に実装出来るようになる
正規表現に新しいメタ文字が作られたときの対応も容易になる
2018/09/21(金) 06:18:04.46ID:LI7qokUP
出来れば定義用の新しいコマンドが欲しい

定義のためのカッコなのにキャプチャが有効になってたり、
正規表現オブジェクトが無駄に肥大化してしまったりするから
2018/09/21(金) 07:17:48.30ID:fJq/snux
>>626
> 出来れば複数行で書いた正規表現を1行に繋げる機能が欲しい
ここはム板なので言い出しっぺの法則が適用されます
629583
垢版 |
2018/09/21(金) 19:24:14.97ID:LI7qokUP
>>628
テキストエディタの正規表現の入力ウインドウに付けて欲しいんだ
次世代のテキストエディタは↓こうなって欲しい

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

これがスタンダードになるといいな
2018/09/21(金) 20:42:25.54ID:c6u7OXiZ
>>629
ガンバ w
2018/09/21(金) 20:44:43.75ID:OGYiByDT
やっぱそうなるよな ここではw
2018/09/21(金) 23:08:38.86ID:3+OghnRP
extendedフラグを付けて鬼雲に渡せば、複数行で処理してくれる。
エディタ側で1行にくっつけたりする必要はない。
633583
垢版 |
2018/09/21(金) 23:41:08.24ID:LI7qokUP
>>632
そういうことじゃないんだな、>>626を読んでね

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

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

逆にテキストエディタの作者がやろうとすると動作を把握しきれずに
不完全なものになったり、実装を諦めたりすることになりかねない
複数行をスタンダードにするためにはライブラリ側での実装が必須となる
634デフォルトの名無しさん
垢版 |
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)
635583
垢版 |
2018/09/22(土) 21:31:53.89ID:SLHR4wJP
>>634
bregonig.dllはプログラミング用のライブラリをテキストエディタでも
使えるようにしたっていう感じなのでプログラミングに必要のない機能は
付けたくないと思う、管理が大変になるからね
だから次世代の正規表現ライブラリと次世代のテキストエディタに期待

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

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

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

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

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

>鬼車オリジナルの作者さん
別人だとは知りませんでした^^;
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を含む正規表現だけど
これは単なるミスなのかな?こんな難しいことをやってる人がこんなミスを
見逃すとはとても思えないから何か違うものなのかなぁ・・
2018/09/26(水) 03:09:00.10ID:Rr41G2Hg
明らかに含むって試してから言ってる?
2018/09/26(水) 10:58:06.87ID:3FykrnoG
>>637
> fmcat =(retofm
で始まる3行のところの正規表現についてですよ?
(〜)* x (〜)* yz の形なので明らかにxyzにマッチします

*y(x*[^xy]y*)*x* は誤植でしょうけど・・
2018/09/26(水) 14:05:39.88ID:pN+YCTD5
あー確かににそこはおかしいな
引用っぽいけど
2018/09/26(水) 23:39:54.65ID:3FykrnoG
やっぱり間違いなんですかね?
プログラムを使って自動的に算出してるようなのに・・
2018/09/27(木) 00:18:43.29ID:0xNuoCxe
俺もわからんけど、prologらしいから、括弧や表記はスタック順になってるとかでは?
2018/09/27(木) 02:58:15.53ID:TOnM2DUW
>prolog
なるほど、"xyを含まない正規表現" のところに grail って書いてあったのは
prologとやらの実行ソフト名だったのか
https://github.com/RichardMoot/Grail

これの使い方を調べれば謎が解けそうですね
暇なときに試してみます、ありがとう
2018/10/06(土) 17:50:41.16ID:0JYIRqz1
検索対象文字 <test>a="akari"desu</test>

正規表現 a="*"

で、検索結果が「a="akari"」でなく、「a="」しか取得できないのはなぜでしょうか?
644デフォルトの名無しさん
垢版 |
2018/10/06(土) 17:56:12.23ID:e52HQVrn
馬鹿には無理
645デフォルトの名無しさん
垢版 |
2018/10/06(土) 18:01:22.57ID:FAIH8E2E
a=\".*\"

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

それでも意図どおりにマッチングしないことは予見できる
2018/10/06(土) 18:14:31.01ID:OZkGL/sg
ワイルドカードと混同しちゃってるのか
ワイルドカードと正規表現を同時に使えるTresGrepなら動くかも
2018/10/06(土) 18:16:35.11ID:OZkGL/sg
正規表現っぽいIDになった?
2018/10/06(土) 18:23:52.49ID:OZkGL/sg
OZk   G    L     /sg
ohzakiさんゲームのリンク

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

ゲーム関係のリンク
http://www.din.or.jp/~ohzaki/game.htm
649デフォルトの名無しさん
垢版 |
2018/10/14(日) 12:53:05.30ID:zaukh1NH
>>643
ワロタw
正規表現の*とワイルドカードは違うぞ。詳しくはググれ。

多分a="[^"]*"でいけると思うけど詳しくはググれ。
2018/10/14(日) 14:33:15.06ID:eP/1gSav
ちょいと質問させて
a="[^"]*"
と書くことが多いんだけど
a=".*?"
と書くのとで結果に違いでるのかな?
2018/10/14(日) 14:56:27.64ID:EqzxaMkD
""のなかに改行が含まれてた場合、違いが出るよ
652デフォルトの名無しさん
垢版 |
2018/10/14(日) 15:11:22.83ID:zaukh1NH
あと、.*?は使えない正規表現の処理系があるんじゃなかったっけか。詳しくは(ry
2018/10/14(日) 15:27:34.24ID:eP/1gSav
>>651-652
なるほど、ありがとうございました
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>
----------------------------------------------------------------------------
655650
垢版 |
2018/10/14(日) 23:38:50.12ID:wMwKNjnw
>>654
サンプルありがとう
でも、そういった検索/置換対象の場合だったら .*? は最初から考えないとは思う
2018/10/15(月) 00:13:04.80ID:fKW/Yset
この誤爆のことに注意を払えているなら .*? で問題ないよ
[^"] はそういう心配をしなくて良くなるからこっちを予防的に使うのもあり
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況