正規表現道場 Part2
【正規表現道場の掟】 ・言語不問 ・質問も大歓迎。使用言語を書くのを忘れずに。 正規表現と関係ない話・質問は他スレへどうぞ。 前スレ 正規表現道場 http://kohada.2ch.net/test/read.cgi/php/1168450843/ Perl6::Overview::Rule http://search.cpan.org/ ~lichtkind/Perl6-Doc-0.36/lib/Perl6/Doc/Overview/Rule.pod [foo|bar]+ Perl6ではこれが正しい書き方になるらしい。初心者がハマりそう・・罠的な意味で。 先読み、戻り読みは書きにくくなった感が否めない。 文字クラスも加算、減算をしないときでも <> で囲う必要があるのはめんどくさい。 が、新しいオモチャとしては十分楽しめそう。ついでに英語も覚えてしまおう。 S05 http://feather.perl6.nl/syn/S05.html > Last Modified: 11 Feb 2014, Version: 174 A05 http://search.cpan.org/dist/Perl6-Doc/share/Apocalypse/A05.pod > Last Modified: 18 May 2006, Number: 5, Version: 7 perl6ではもはや正規表現ではないという意味を込めて 「regex」 と呼んでるらしい。 perl5の正規表現にあった 「ゴチャゴチャ感」 が綺麗に一掃されてる感がある。 :ratchet があるのは最高だなぁ。 http://anago.2ch.net/test/read.cgi/applism/1393578532/139 http://anago.2ch.net/test/read.cgi/applism/1393578532/157 この書込の方を正規表現でNGにしたいと思っています。 条件は 最初の行とは限らないが、「・」で初める行がある。何文字かの後、改行 その次の行は空の行 この2セットを正規表現で表すにはどうすればいいでしょうか? .*?・.*?\r\n\r\n としてみましたがダメでした。 >>145 2chブラウザ用でいいのかな?処理速度重視で作った。 (?:^|<br>)(?>\s*)・(?>[^<]*(?:(?!<br>).[^<]*)*)<br>(?>\s*)<br> >>146 素敵! 神! すっきりしました! テキストじゃなくhtmlに対して正規表現だったのですね、勉強になりました。 ありがとうございました! (>>146 ) (?:^|<br>) は分岐のバックトラックが残るから (?><br>|\A) としたほうが良さそう。 この2つは動作が完全なイコールではないので注意が必要、文頭が <br> だった場合に 絶対に \A がマッチ出来なくなるため。これが問題になることはほとんど無いだろうけど。 (>>144 ) S05 ttp://perlcabal.org/syn/S05.html >Last Modified: 27 Feb 2014 Jeffrey Friedl ttp://regex.info/ Jeffrey Friedl - 第3版のコード ※ CGIなので直リンは避けたほうが良い。 regex.info/listing.cgi?ed=3&p=all 第2刷に対する正誤表 - 詳説 正規表現 第3版 ttp://www.oreilly.co.jp/books/9784873113593/#errata0 Google Books 詳説 正規表現 ※ 立ち読み可能 ttps://www.google.co.jp/search?tbm=bks&hl=ja&q=%E8%A9%B3%E8%AA%AC%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE ascii抜粋 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ >>142 >Perl6 正規表現 I ここのサイト主、先読みを理解出来てないな・・。beforeとafterも逆だし。 windowsXP ショートカットのパス --------- C:\WINDOWS\system32\cmd.exe /k C:\test.pl6 --------- /k は実行後にウインドウを閉じないオプション。 拡張子 pl6 を perl6.exe に関連付けしておく。 test.pl6 にperl6のテストコードを書いて実験する。 #!/usr/bin/perl6 my $str; $str := "AAABBBCCC"; say $str.trans( 'A'=>'a', 'B'=>'b', 'C'=>'c' ); say "\n"~$str; ---結果--- aaabbbccc AAABBBCCC ### winXP で文字コードの 『et_EE.ISO8859-1』 を使えるようにする手順 !!! 試すときは仮想マシンを使うこと。環境が壊れて文字化けだらけになるため。 !!! 1、「コントロールパネル」 → 「地域と言語のオプション」 2、「日本語」 や 「日本」 と設定されている所を全て 「エストニア」 に設定する。 3、PC再起動 => perl から et_EE.ISO8859-1 が使用可能になる。 順番が s z t u に変わったことを確認。ただ、 [a-z] で t 以降もマッチするのは変わらず。 [FreeBSD] - 2005/9/3 ( => FreeBSD4.10? ) http://lists.freebsd.org/pipermail/freebsd-bugs/2005-September/014529.html http://lists.freebsd.org/pipermail/freebsd-bugs/2005-September/014531.html 正規表現 Part11 http://toro.2ch.net/test/read.cgi/tech/1363769640/330,325 FreeBSD - 2005/9/5 http://lists.freebsd.org/pipermail/freebsd-bugs/2005-September/014529.html http://lists.freebsd.org/pipermail/freebsd-bugs/2005-September/014531.html 正規表現 Part11 http://toro.2ch.net/test/read.cgi/tech/1363769640/330,325 [[ winXPで et_EE.ISO8859-1 を使う ]] 1、「コントロールパネル」 => 「地域と言語のオプション」 2、「日本」 「日本語」 を全て「エストニア」 に変更。 3、PC再起動 perlで s z t u の順になるのを確認。しかし [a-z] が t u 以降にもマッチするのは変わらなかった。 => 順番が変わることによるトラブルを避けるために対策されている? ※ これをやると環境の一部がエストニア語で上書きされ日本語に戻せなくなるので 試すなら 「VM ware」 や 「Virtual PC」 等の仮想マシンで試しましょう。 2005/9/5 に問題報告がされているのでそれ以前にリリースされたFreeBSDを使って試せば 完全に再現出来る可能性大。そして 4.11で再現出来なくなっていれば対策が取られたということになる。 --------c:\test.pl----------- use locale; print +(sort grep /[a-z]/i, map { chr } 0..255), "\n"; --------c:\test.pl----------- C:\>perl test.pl aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsSzZtTuUvVwWxXyY C:\>perl -v This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x86-multi-thread ----------------------------------- ↓これを使わなくても順番が変わった。 use POSIX qw(setlocale LC_ALL); setlocale(LC_ALL, "et_EE.ISO8859-1"); コンパネで「エストニア」と指定しただけで「et_EE.ISO8859-1」は未指定の状態。 ----------------------------------- /[a-z]/i を /\w/ に変えると英字以外の文字も英字の間に 挟まっていることが確認出来る。 --------c:\test.pl----------- use locale; # これが無いと順番が変わらない use POSIX qw(setlocale LC_ALL); # コメントアウトしても変化なし setlocale(LC_ALL, "et_EE.ISO8859-1"); # コメントアウトしても変化なし my $abc; $abc = "STU"; $abc =~ s/[A-Z]/hit/g; print $abc."\n"; --------c:\test.pl----------- [結果] hithithit 順番が変わっていれば S にしかマッチしないはずだが3文字すべてに マッチしている。 LC_ALL を LC_CTYPE や、 LANG などに変えたり、test.plを保存するときの 文字コードをutf-8からshift_jisに変えたりしても結果変わらず。 XPsp3+perl5.16.3の環境で S だけにマッチさせる手段は無いと思われる。 >>156 「辞書順」はロケールに依存するが「文字コード順」は文字コードに依存する、んじゃね? 文字集合の範囲指定が文字コード順と定義されているなら、 いくらロケール切り替えても文字コード切り替えない限り無意味だろう。 で、文字集合の範囲指定ってどっちだと定義されてるの? >>160 俺はロケールや文字コードの知識はほとんど無いんでよく分かってない。 ↓は winXPsp3 + perl5.16.3 + ロケール = 「日本」 の環境での実験結果。 ・ [ァ-ィ] が ア にマッチするか実験。( 文字コード順ならマッチしないはず ) ---------------------------------------- use locale; if ( "ア" =~/[ァ-ィ]/ ){ print "hit\n"; } else { print "no hit\n"; }; ---------------------------------------- 結果: hit ( マッチしたので文字コード順ではない ) この環境での範囲指定は↓の順みたい。これはshift_jisの並び順とは違う。(これが辞書順?) ---------------------------------------- _0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZァアィ スセソタチッツテトナニヌネノハヒフヘホマミムメモャヤュユョヨラリルレロワヲン ---------------------------------------- 文字コードでなくロケールに依存するという発想は思い付かなかったわ、そっちの線で また実験しながら遊んでみるよ、辞書順とやらも調べてみる。ヒントありがとう。 (>>156 ) ついに [a-z] が t 以降にマッチしない動作の再現に成功! et_EE.ISO8859-1 の代わりに et_EE.ISO8859-15 を使ったら再現出来ました! 今まで助言をくれたみなさんありがとう〜。自分一人じゃ絶対無理だった。 ↓こちらの方々にも感謝〜 初心者もOK! FreeBSD質問スレッド その117 http://toro.2ch.net/test/read.cgi/unix/1380865524/938-954n 詳しい手順はもう少し調べて整理してから載せます。 2ch .scに移転しました。 正規表現道場 Part2 http://nozomi.2ch .sc/test/read.cgi/php/1348048723/l50 ■ 2ch.netの問題点 ・ 2chscがNGワードになってるので正規表現をスレに貼るのに支障が出る。何より言論統制はイクナイ。 ・ 管理人が今後どう動くか予測が付かない。 自暴自棄になりIPや書き込み履歴を大公開して逃走する可能性すらある。会社IPの人は注意。 使用しているのはYahoo! Pipesのregexです http://d.hatena.ne.jp/dacs/20080422/1208868051 ○○/△△&#xd;[□□ という文字列から△△だけを抜き出したくて、色々試してみているのですがどうもうまくいきません ".*/" -> replace -> "" "\&#xd;.+" -> replace -> "" だと思うのですが、何か間違いがあるのでしょうか? ちなみに "[.+" -> replace -> "" も試してみましたがダメでした Yahoo! Pipesの仕様なんて知らんが 文字列の開始も終わりも指定してないということは .*/で一番最後の/までが対象として消える可能性はある ファイル検索ツールでパスを入力する時、「\」「/」を入れると候補が0になってしまいます d:\\abc\\123\\ のように入力しているのですが、間違っていますか? (sc>>212 ) >qr/\"((?:\\[\\\"]|.)*?)\"/ > これはよっぽど自信がないと書けない書き方だ。 今考えると弾たんは単に2文字否定の作り方を知らなかっただけだな・・。 知ってたらこんなあやふやなものを作ろうなんて思わないし。 早さに拘るのに早い正規表現の作り方を知らないというちょっと残念な弾たん。 他の正規表現を見ても正規表現自体のスキルは高くない。 なんでもこなすオールラウンダーだから薄く広くになるんだろうな。 しかしこの程度の正規表現スキルでcpanのモジュール作って大丈夫なんだろうか。 探せばバグが出てきそうな予感。 正規表現のスキル自体とモジュール作成能力には直接的な相関関係はないからなあ・・・ そういう指摘するだけでモノ作ったり貢献してなさそうなお前はもっと駄目な人間だから安心しろ。 弾はなんだかんだ色々作ってるし色々な方面に貢献してる。 指摘することも立派な貢献だと思いますよ。現に指摘によって処理時間が半分以下になってますし。 まだ連投規制が解除されないなう ## m// キャッシュを保持してない状態では空文字列にマッチする。 うっかりするとバグの原因になり得る。 .scの連投規制は俺も食らったけど(専ブラだと「書き込めたかも…」で書けてない状態)、 Webブラウザで投稿したらBOT疑惑なのでCapchaしろになってそれで解除できた。 URLを貼りまくって連投規制になった場合は知らん。 >>178 俺の場合は「連続投稿は禁止されています。Error!」って出るだけ。 普通に連続投稿が原因で規制食らってるみたいだからもうダメかも分からんね。 人が少ないから自然に独り言みたいになるのにそれで規制されたら ますます人少なくなるなw >>2 正規表現メモ (?num) の説明文にある・・ ------------------- (\()?[^()]+(?(1)\)) ------------------- これは (?num) とはまったく関係ない正規表現。ただの条件文。 >>182 ---------------------------- (?(R)...) PCREで、再帰的パターンの開始を示します。 <(?:(?(R)\\d++|[^<>]*+)|(?R))*> ---------------------------- 説明文は間違い。これは条件式の条件。\\d は \d の間違い。 perldoc.jp http://perldoc.jp/docs/perl/5.14.1/perlre.pod (?(condition)yes-pattern|no-pattern) の項目を参照。 詳説 正規表現のAmazon値 (1年前との比較) ・古本 初版 &nbsp;500円 → 1998円 2版 1600円 → 3150円 3版 4000円 → 3709円 ・新品 3版 5184円 Amazon - "正規表現" http://www.amazon.co.jp/s/field-keywords=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE 文字参照の処理、間違えてますよ > 2ch.net ttp://cpansearch.perl.org/src/DANKOGAI/Unicode-Char-0.02/lib/Unicode/Char.pm ↓ ^ か \A 忘れてね? ------------------------ $method =~ s/.*:://o; ------------------------ ---------------------------------------------------------- my ($hex, $name) = ($line =~ /^([0-9A-Fa-f]+)\s+(.*)/); next if $name =~ /[a-z]/; # range, not character ---------------------------------------------------------- 2行目だけ小文字に限定されてる。これで良いのか悪いのかは分からないが。 ttp://cpansearch.perl.org/src/DANKOGAI/Lingua-JA-Numbers-0.04/lib/Lingua/JA/Numbers.pm ----- せっかく [eE] と書いてるのに /i = ($num =~ /([+-])?(\d+)(?:\.(\d+))?(?:[eE]([+-]?\d+))?/io); ----- ちゃんと動くんだろうけどアンカー付けないのが気持ち悪い。 $int =~ s/(.*)(.{48})\z/$2/o; ----- これミスでね? [k|g] if ($style =~ /(?:romaji|[k|g]ana)$/){ 本人に直接言う勇気がないらしい。まこと残念な人である 皆はこうならぬように あれ、/o が使われてる。なんでapache logのltsv変換には 使われてなかったんだろう。ああいう時こそ効果的なのに。 ■ combined2ltsv.pl の re で /o の有無をタイム計測 /o なし 12724/s /o あり 31689/s /o あり は2.5倍早い。これは報告したほうがいいかも。 (>>186 ) これに /o がついてるとなんか笑ってしまうw 余談追加。俺は報告なんかしないんで報告したい人がいたらしてね。 小飼 弾が手負いのうちに容赦なくツッコミを入れておく http://akiba.geocities.jp/hp20140401/2014/006.html (>>188 ) --------------- use utf8; --------------- \d --------------- 弾たんにならこれで通じるだろう。(確信) 神戸大:オートマトン ttp://kurt.scitec.kobe-u.ac.jp/~kikyo/lec/07/automaton/k5.pdf 行列の次は集合か・・もう忘れたよ・・覚えたことないけど。 Q、 perlの正規表現では \A\z == ε である。では、 ??? == φ の ??? は何になるか。 if( () =~ "" ){ print "hit\n"; } else { print "no\n"; }; 結果 hit 答え、なし () と "" を比較して no を返す方法はあるか。( φとεの比較 ) () eq "" () == "" "" eq undef "" == undef () eq undef () == undef すべてtrueが返る。 弾たん : perl - にも真偽値は存在する http://blog.livedoor.jp/dankogai/archives/51268304.html ちなみにブログのトップではGoogle Chromecastをボロクソに叩きつつ、Chromecastへのamazonアフィを 張るというすご技を展開されております。 こういう人相手に>>193 を報告しにいってもスルーされるだけだと思うよ。カネにならないからね。 >>201 それ、お前向けにカスタマイズされてるだけだろ。 javascriptでhtmlタグ内以外での検索をしようとしていますが、上手く行きません。お助け下さい。 lat = 'あい'; body = '<a href="あい">あい</a>'; reg = new RegExp(">[^<][\s\S]*?" + lat + "[\s\S]*?<","m"); body.match(reg); console.log(reg.index); 13が返って欲しいのですが、undifinedになります。 当スレは中級者以上向けになっているのでこちらへ。 Regular Expression(正規表現) Part12 http://peace.2ch.net/test/read.cgi/tech/1387257592/ jsならieか否か、または両方かも書いたほうが良いでしょう。 確率の基本 - 青空学園 http://aozoragakuen.sakura. ne.jp/probability/probability.html 豪快に脱線中。言論統制対策でスペース。 確率 1/10 で当たるんなら 10 回やれば当たる? http://www.math.kobe-u.ac.jp/HOME/saji/mathyomi/probability.html 確率は正規表現の処理効率向上に使う。 "|" による分岐で確率の高いほうを前に置いたほうが早くなるetc.. ## 確率の実験 my $cnt=0; for (my $i=0; $i<1000000; $i++){ if ( int(rand(3)) == 0 || int(rand(3)) == 2 || int(rand(3)) == 1) { $cnt++; }# if } #for print "$cnt\n"; __END__ && ・・・ A∧B || ・・・ A∨B 傘スレの無能っぷりが酷い。正規表現作ってやりゃ済む話じゃないか。 \Gを知らないのか使えないのか知らんけど・・ テキストエディタの正規表現には関わりたくないや。 >>220 知らなかったの方だけど、こそこそ指摘するとか鬱陶しい奴だな… \G(?:@command|,) タダでスキルアップさせてやったんだから文句言うなっしー。 ★2ch勢いランキングサイトリスト★ ◎ +ニュース ・ 2NN ・ 2chTimes ◎ +ニュース新着 ・ 2NN新着 ・ Headline BBY ◎ +ニュース他 ・ Desktop2ch ・ 記者別一覧 ◎ 全板 ・ 全板縦断勢いランキング ・ スレッドランキング総合ランキング ◎ 実況込み ・ 2勢 ・ READ2CH ・ i-ikioi ※ 要サイト名検索 > ※ ヤフーのHTMLには javascript が使われており、正規表現がコードの一部に誤爆します。 ・・・ならテストデータ変えろよと。 群論入門 http://www.nurs.or.jp/ ~lionfan/ironna_05.html その1 - 17P × 60度 ○ 120度 preg_replaceで文章内に<br /><br />が出現した以降の文字をすべて削除するのはどうすればいいですか? 「正規表現」などを使う場合には、【regex railroad diagram】を利用すれば、とても分かりやすく「図式化」してくれます http://plus.appgiga.jp/masatolan/2014/10/31/54305/ 2ch専ブラで「1文字だけしか書かれていないレス」をNG処理する場合はどういった表現をすればいいのでしょうか 正規表現で電話番号を確認するにはどうしたらいいですか? 固定番号 携帯番号 フリーダイヤル 国際番号 といったものがあるのでわかりません。(緊急ダイヤル系は無視して構いません) どなたか正規表現を教えてください 電話番号とは何かって質問はスレ違い。 自分の定義する電話番号はこうですって(正規表現以外の方法で)提示してください。 緊急ダイヤル系は無視して構いませんって、つまりそれが何だか含めた電話番号とは何ぞやを 考慮して回答しろって書いてあるじゃねーか。 しるかそんなモン。 >>240 ありがとうございます! 参考にしてみます データから例をあげないと書きようがないよね ハイフンあったりなかったり、それら含めて全部なのか・・・ read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる