正規表現道場 Part2
Q、(*COMMIT) とは逆にマッチが成功したときだけ /g を止める最も簡単な手段は何か? $_ = "123"; @test = $_ =~ m/1|2|3/g; print "@test\n"; ↑2 がマッチ成功したときに /g を止め、3がマッチしないようにする。 フラグ変数を用意、チェックすれば可能だがもっと手軽な手段はないか。 う〜ん、/g はループなのに break する方法が用意されていない。 COMMIT があるのにこれがないのはとても不可解だ。 # 先読みの中の (*SKIP) は機能しない。 @test = $_ =~ m/1|2(?=.*(*SKIP))|3/g; # while 文の last を使う。 $_ = "123"; while ( m/1|2|3/gp ) { print "${^MATCH}\n"; last; } # 1 で止まる。 # (?{code}) で last → 効果なし while ( m/1|2(?{ last; })|3/gp ) # while 文に名前を付けて (?{code}) で last → 効果なし TEST : while ( m/1|2(?{ last TEST; })|3/gp ) perl陣営に言えば新しいコマンド作ってくれそうだなぁ。 # (?-g) → 効果なし while ( m/1|2(?-g)|3/g ) # 苦肉の策 (現実的でない) while ( m/(1)|(2).*|(3)/g ) { print "${^N}\n"; } # 苦肉の策 + 最後の空文字列にマッチしない対策 (現実的でない) while ( m/\z(*COMMIT)(*F)|(1)|(2).*|$/g ) { print "match! ${^N}\n"; } >>111 >>112 >>123 /g がループというのはちょっと違う. リストコンテキストで評価したときはループと言えるが,スカラーコンテキストで評価したときはループではなく, 単に前回マッチした場所を覚えていて続きからマッチングを行うというだけ. この問題はリストコンテキストで /g を評価したときに,マッチ成功後に途中で止めるいい方法はないかって言う問題だと解釈した. スカラーコンテキストで評価したときに止めるんなら last を使えば簡単に止まる話. つまり,while を使っていいんなら, while (/1|2(*:STOP)|3/g) { push(@test, $&); last if $REGMARK eq 'STOP'; } print "'@test'\n"; リストコンテキストで評価したときに途中で止めるには,かなり条件が限定されるが, @test = $_ =~ m/(?(?<=2)\G(*COMMIT)(*FAIL))(?:1|2|3)/g; ぐらいしか思いつかなかった. これではフラグを使った方が簡単だろう. >>114 >ループというのはちょっと違う そのへんはちゃんと理解してるから大丈夫。foreachとか<>みたいなつもりで書いてるから。 >リストコンテキストで /g を評価したときに,マッチ成功後に途中で止めるいい方法はないか その通り。 >(*:STOP) これはフラグ変数を使うやり方とまったく同じだからボツ・・。{ } の中で last するのはナシ。 m/ / の中で止められないか、という話だから。 しかも$REGMARKと$REGERRORは予期しない動きをすることがあるから 普通にフラグを使ったほうが確実。(後述) >これではフラグを使った方が簡単だろう やっぱそうかぁ、雑技たんでもダメなら無理そうだね。考えてくれてありがとう。 ## $REGERROR # マッチ失敗でも$REGERRORが偽を返す例 $_ = "11"; m/^(*MARK:NAME)12/; if ($REGERROR){ print "yes\n" }else{ print "no\n"; }; 結果 → no # 2 を (?!) や (*FAIL) に変えると・・? m/^(*MARK:NAME)1(?!)/; 結果 → yes 2 を $ にすると no のまま。 あれ、$REGMARK が予期しない動作になるデータはないや。 ごめん、使えないのは $REGERROR だけかも。 >単に前回マッチした場所を覚えていて続きからマッチングを行うというだけ あ、ちゃう、これ分かってなかった。場所覚えてるだけだったのか、違和感感じてたんだけど やっと理解出来たよ、ありがとう。 あと雑技たんのサイトだけど >回文にマッチする正規表現 # 再帰版 × (??{$palindrome})* ○ (??{$palindrome})? だね。前者だと回文を繋げた文字列 121454989・・・ みたいなのを拾ってしまう。 >>117 確かに $REGERROR は期待通りに動かないな. >>118 回文の間違い指摘ありがとう. おや、出来ちゃった・・ # リストコンテキスト + /p のマッチング中に break する。 $_ = "123"; @test = $_ =~ m/ 1 |2 (?{ $last = "${^MATCH}"; }) (*COMMIT)(*F) |3 /xgp; push(@test,$last); print "@test\n"; # リストコンテキスト + /p のマッチング中に break する。( push版 ) push(@test, m/ 1 |2 (?{ $last= ${^MATCH}; }) (*COMMIT)(*F) |3 /xgp , $last ); >>119 仕事はやっ!修正乙〜 ↑× /p のマッチング中に → /g の間違い ---------------------------------------------- # 先読みの中の (*SKIP) は正しく機能する。(× >>112 ) $_ = "123"; @test = $_ =~ m/1|2(?=.*\z(*SKIP)(*F))|3/g; print "@test\n"; # 結果 → 1 # 先読みの中の (*SKIP) が失敗する例もある @test = $_ =~ m/1|2(?=.*\z(*SKIP))(*F)|3/g; # 結果 → 1 3 # perl内部の最適化の影響により (?=) より早く (*F) が判定されている? # $REGERROR が期待通りに動かない原因も最適化が犯人? (最適化は 詳説 正規表現 参照) ---------------------------------------------- # \z で始まる正規表現 + while( /g ) while ( m/\z(?{ print "in code\n"; })/g ) { print "match!\n"; } <結果> in code match! in code 2回走査されてる。2回目は走査しといてマッチ失敗。/g により1つ先に進む動作の副作用? (?{code}) が2回実行されるのでプログラムが想定外の動作になる可能性。 /g を忘れると走査開始位置が毎回先頭に戻り、無限ループになる。 # リストコンテキスト + /g のマッチング中に break する。(perl 旧verl対応版) $_ = "12223"; @test = $_ =~ m/ 1 |2 (?{ $last = "$&"; }) .*\z # 余った文字列を全部マッチさせる。 |3 /xgs; $test[$#test] = $last; # 最後の要素の入れ替え print "@test\n"; これらを "break出来てる" と言うのはちょっとおこがましいかも知れない。やはり break コマンドが欲しい。 ・$REGERROR を (?{code}) と入れ替えて実験 my $cnt = 0; $_ = "11"; m/^(?{ $cnt++;})1(*F)/; print "$cnt\n"; # 結果 → 1 my $cnt = 0; $_ = "11"; m/^(?{ $cnt++;})12/; print "$cnt\n"; # 結果 → 0 $REGERROR さんに無罪判決。冤罪でした。 皆様、こんにちは 質問させてください テキスト内の文字を置き換えるアプリ(Devas)で作業をしています 正規表現で文字検索と置き換えしたいのですが表現法がわかりませんので 詳しい方アドバイス下さいませんでしょうか? テキスト内には .(ドット)abc"IMG .(ドット)def"IMG .(ドット)ghr"IMG など . と "IMG で囲まれた数パターンの文字列がありこれに元文字列を利用し .photo を付け加えたいのです .(ドット).photo.abc"IMG .(ドット).photo.def"IMG .(ドット).photo.ghr"IMG 検索、置き換え 共に正規表現が使えるアプリなのですがそれぞれどう表現して良いのか教えてくださいませんか? よろしくお願いいたします ・開始タグと閉じタグの間に文字列を含まない正規表現 (正規表現 否定 除く) $_ = "ABC ABC DEF ABCDEF"; while ( m/ # Perl 5.10 以降で有効 ABC [^ADX]* # 先頭の文字を使った高速処理 (?: (?: DEF (*ACCEPT) # マッチ成功 |\K ABC # 今までマッチした文字列を捨ててリスタート |XYZ (*PRUNE) (*SKIP) (*F) # NGワード検出、マッチ失敗 |. # ↑の3つ以外の1文字 ) [^ADX]* )* (*COMMIT) (*F) # DEFで閉じられないまま終端に到達。 /xgsiaap ) { print "match! <${^MATCH}>\n"; } # NGワード、開始タグ、閉じタグの競合は想定していない。 # 例、NGワード="</" 、 閉じタグ="</div>" >>124 <検索> \.([a-z\d]{1,4}"IMG\b) <置換> ..photo.$1 \. を ( ) に入れてないのは処理効率を上げるため。 「abc」の部分は拡張子と考えて数字も許可した。(1文字以上4文字以下の英数字) 何かまずかったら遠慮なく。 たくさんレスいただきましてありがとうございます お礼が遅れまして申し訳ありません 127様の \.([a-z\d]{1,4}"IMG\b) で無事検索できることができました しかし置き換えでは マッチした文字列が ..photo.$1 に置き換わるだけで $1にマッチした語句が適応されません 検索結果 ○○○○○○.abc" IMG が ○○○○○○..photo.$1 となります 希望では ○○○○○○.photo.abc" IMG となることです(単純に .拡張子 前に .photo を入れたい) 先の書き込みでの訂正がありました 申し訳ありません 検索したい文字列には " と IMG の間に半角スペースがありました 半角があっても上手く検索にひっかっかっていますが 上手く置き換えができないのはこの半角が原因なのでしょうか? 引き続きご指導いただければ幸いです よろしくお願いいたします >>128 ごめんなさい、こちらにも見落としがいくつかありました。 ( Devasにはメジャーな正規表現エンジンが使われていると考えて作りましたが違ったようです ) ・通常版 (上行=検索、下行=置換) \.[a-zA-Z\d]{1,4}" ?IMG\b .photo\0 ・拡張子を小文字に変換する版 (例 .JPG → .jpg ) \.([a-zA-Z\d]{1,4})(" ?IMG\b) .photo.\L\1\E\2 ・ 「"」 と IMG の間のスペースがあっても無くてもスペース1個にする版 \.([a-zA-Z\d]{1,4})" ?IMG\b .photo.\L\1\E" IMG # \L と \E を削除すれば拡張子の小文字変換はしなくなります。 # 本当は .photo.photo.jpg のような複数回置換による重複を防ぎたかったんですが # この正規表現エンジンでは無理なようです。(>_<) >>129 度々のレスありがとうございます 正規表現エンジンにもいろいろなものがあるとは知りませんでした お手数をおかけいたしまして申し訳ありません いくつものパターンを示してくださいまして 重ねて感謝いたします 通常版にて理想の変換ができました 今回教えて頂いたような知識を深めて、もっと便利にPCを使えるようになりたいと思います 勉強になりました ありがとうございます m(_ _)m 質問させてください。 phpのpreg_match関数でwebページから文字列を抽出したいと考えています。 以下を使用して抽出していますが、改行が含まれると抽出ができませんでした。 $text = '/value="(.*?)" id="latest"/'; preg_match($text, $source, $matches); $word = $matches[1]; 色々調べて$textを以下のようにしてみましたが、うまくいきませんでした。 $text = '/value="(.*?)" id="latest"/s'; $text = '/value="([\s\S]*?)" id="latest"/'; $text = '/value="((\n|.)*?)" id="latest"/'; 何故うまくいかないのかよくわかりません。 なにかアイデアはありませんでしょうか? 俺なら /value="([^"]*)"\s+id="latest"/ × ' ' ○ " " というオチ?PHPは触らないから分からない。 PHPなんか触らないから分からないけど両端のすらすらが余計とかなんかね ごめんなさい、PHPの解説サイト見たら ' ' でOKでした。 PHPスレで聞いたほうが早いかも。原因が改行以外にある可能性も十分あるので 動かないサンプルコードをアップして見てもらえば確実に原因教えてもらえると思う。 ↑$source に入るHTMLファイルも見ないと原因が分からない可能性アリ。 再帰と (?( ) yes|no) の組み合わせが楽しすぎる。もしかしたら宝の山かも。 マトリョーシカの中にダルマを入れられる感じ。 正規表現メモ http://www.kt.rim.or.jp/ ~kbk/regex/regex.html#NOTINCLUDED 「調整中」 気付いてもらえたのかそうでないのかいまいち分からんす。 このサイトはあんまアテにしないほうが良さそうだ。 >>125 の疑問点 \K が分岐の先頭にあることで処理速度に遅れが出るかどうか調べる。 また、\K を使わない書き方とどちらが早いか調べる。 比較対象追加 ( >>125 ) | (?=ABC) \K ABC 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 ありがとうございます! 参考にしてみます データから例をあげないと書きようがないよね ハイフンあったりなかったり、それら含めて全部なのか・・・ 1.文字列の末尾にある数字を1〜2桁まで抽出したい(末尾に1文字までなら数字以外が入っても構わない) 2.抽出した数字が1桁の場合は先頭に「0」を足して二桁に変えたい これを正規表現1行で行いたいのですが 検索:.*?(\d{1,2})(\D{0,1})$ 置換:\1 これで1つ目はいけたんですが、さらに2つ目の内容を正規表現1行で行うことは可能でしょうか? >>244 しっかり纏められて助かります^^b ありがとう! > \G 直前の一致文字列の末尾 こう覚えちゃう人多いんだよねぇ。こういうサイトが嘘広めてるんだろうな。 お前はいったい何なんだ? 必死に勉強したわけでもなく、必死に働いたわけでもなく 何も築かず、耐えず、乗り越えず、ただダラダラ過ごし 自分の都合の良い妄想だけを垂れ流す。 お前は今のゴミみたいな人生を、今は仮、本当の自分を使っていないだけ そう飽きず言い続け、結局はそのまま死ぬ 最底辺キモヲタで底辺人生の今が本物であることに、そろそろ気が付こうぜ! 改行や余計な文字が入ってる場合のNGはどう書けば良いでしょうか? 例です V i からきますた! p この[V∨vv]→[IIii]→[PPpp]→NGを完成させたいです [V∨vv][^IIii]*[IIii][^PPpp]*[PPpp] 尚、テストはしてない >>253 出来ました! ありがとうございます! 何故出来たかよく分かんないので研究します! 青空にある文章で章ごとに一、二・・・百八十三と数字 がついているのですが、それを一括して置換するにはどうすれば いいでしょうか?漢数字の間には改行がついています。 質問よろしいでしょうか? 一文字のみのレスを正規表現で指定するにはどうすればよいでしょうか マ イ ン ド コ ン ト ロ ー ル の手法 ・沢山の人が、偏った意見を一貫して支持する 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法 ・不利な質問をさせなくしたり、不利な質問には答えない、スルーする 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法 偏った思想や考え方に染まっていたり、常識が通じない人間は、頭が悪いフリをしているカルト工作員の可能性が高い 靖 国 参 拝、皇 族、国 旗 国 歌、神 社 神 道を嫌う カ ル ト 10人に一人は カ ル ト か 外 国 人 「ガ ス ラ イ テ ィ ン グ」 で 検 索 を !,,,, 「ちな」をNGにしたいけど、「ありがちな」や「ちなみに」はNG対象外としたい ちな(!?み) これで「ちなみに」は対象外にできたんだが、「ありがちな」も同時に対象外にするにはどうしたらいい? 「ちなみに」の略として「ちな」を使ってるのを想定してるとゲスパーするが、 「ちな」を含む言葉なんて沢山あるから、それらを考慮し始めるとキリが無い 行頭にある場合とかで妥協しときなせ >>261 ご明察 100%問題なくNGにできるとは思ってなくて、NGの誤爆が減ればいいなって感じで質問してみた そもそも、 "AB" には一致して "xyAB" には一致しない正規表現って書けるんだろうか 俺の実力じゃよく分からんかった >>262 否定後読み(戻り読み) (jscriptには無いので使用環境によっては使えないことに注意) >>263 おー、サンクス >>259 の課題はこれでいけた、Janeで一応動いてるっぽい(>>259 のは書式間違ってたねすまん) (?<!が)ちな(?!み) 誤爆が見つかったら"|"使って地道に誤爆減らしてる 変数の後に数字つける方法がわからん (\d\d) (\d\d) → \1\212345 →NG (\d\d) (\d\d) → \1\2\x312345 →NG 先読み使えるの? 手元のエディタは変数の後数字が来るとバグる >>265 どういう環境なのか知らんので一般的な回答だけど 正規表現内の後方参照では、\1,\2の替わりに\k<1>,\k<2>(または\k'1', \k'2')と書ける $1,$2の場合は、${1},${2}と書ける(jscriptの場合は、$01,$02とする) 【例】 文字列: 112 正規表現:^(\d)\k<1>2 (またはキャプチャの括弧を使って ^(\d)(\1)2 としても良い) 部分文字列の参照:${1}2 (jscriptなら$012) で、12となる >>266 ありがと 使ってたのはmfindだからPerl 5互換 コマンドプロンプトで高度な正規表現使えるソフトだったので すいません質問です 言語…sakuraeditor ↓次のような文章を小さい順に並べたい、この部分 (パイプABC001) |ABC001 |の次は必ずアルファベットになります ・文章 (例) カメラ|ABC001 レンズ|BCD005 バッテリー|CDV003|不良あり … 「|」←この縦棒の入力の仕方教えて スマホでATOCでの入力方法が知りたいです 記号全部見たけど該当するのが見つけられませんでした 教えて下さい!! テキストデータにある電話番号部分を消したいのですがどのようにしたらいいでしょうか? 氏名 3桁の市内局番 ハイフン 4桁の番号 住所 というデータです。 テキストエディタを使って正規表現でハイフン付きの電話番号部分だけを消したいのです。 よろしくお願いします。 JavaScriptで作った。 空白は半角空白のことです。 「空白数字3つ空白-空白数字4つ空白」の部分を、1つの半角空白に置換する。 もし違っているなら、データの入出力を、正確に書いてくれ 入力 東京太郎 123 - 4567 東京都なんたら 大阪次郎 123 - 4567 大阪府なんたら 出力 東京太郎 東京都なんたら 大阪次郎 大阪府なんたら var str = "東京太郎 123 - 4567 東京都なんたら" + "\n" + "大阪次郎 123 - 4567 大阪府なんたら" var str2 = str.replace(/ \d{3} \- \d{4} /g, " "); console.log(str2); Google Apps Scriptなんですが ここの時系列データ(日付〜出来高まで)抽出したいのだけど、上手くいきません。 ttps://jp.investing.com/indices/vn-historical-data var myRe = /<td.*>(\d{1,2}月\d{1,2}日\d{4}年)<\/td><td.*>([\d,]+(\.\d+)?)<\/td><td>([\d,]+(\.\d+)?)<\/td> <td>([\d,]+(\.\d+)?)<\/td><td>([\d,]+(\.\d+)?)<\/td><td.*>([\d,]+(\.\d+)?)k<\/td>/g; 公開された、APIを使えば? 公開されていないのなら、jQuery などで、抜き出せばいい id が、results_box で、その子孫の<td> なら「#results_box td」 var tmp_id = "results_box"; var selector = "#" + tmp_id + " td"; console.log('selector = ' + selector); var jqObj = $(data).find( selector ); console.log('jqObj.length = ' + jqObj.length, '\n', jqObj); if ( 0 === jqObj.length ) { データなし } !で始まる行を除く半角英数字を正規表現で記述することはできますか? 否定先読みを使ってもうまくいきませんでした >>283 素人考えで下記のようにしてみました (?!^!.*\n)[!-~¥] 素養がないので質問をすること自体が恐縮ではありますが ご教授いただければと思います プログラム板の正規表現スレの方が、人が多い。 そっちへ書き込んだら? 半角英数字は、文字クラスで、簡単に表現できそう 問題は具体例がないから何を対象として或いは対象としたくないのかが分からんということだ そもそも半角英数字には、! は含まれていないから、 ^[A-Za-z0-9]+$ ABCとDEF という単語を両方含むレスをNGにする事はできますか? ABCだけが含まれるレスとDEFだけが含まれるレスはNGにせず、両方含まれる場合だけNGにしたいです 誰でも簡単にネットで稼げる方法など 参考までに、 ⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。 グーグル検索⇒『半藤のブブイウイウレレ』 A4BHVWGZK8 http://egg.5ch.net/test/read.cgi/applism/1509549074/800 このような、本文に何もないレスを非表示NGにしたいのですが、^$でも^\n$でも対処が出来ず。 …と言うより、一体どう投稿したのかさっぱり分からず…試しに任意の1文字を含む本文をNGにしても効果なく、ならば任意の1文字を含まない本文を…も効果なく、まるで正規表現のNGWordを一切受け付けない感じなのですが、なにか方法がありますでしょうか? >>294 あと、正規表現を使わずに文字列で をNGWordにしたところ、本文無しレスが1つと、多数の普通のレスが巻き添えで消えてしまいました。 消えずに残った、連投された本文無しレスのしぶとさと言ったらもう…。 とりあえずJaneStyleで動いたやつ ^(?i:<br(?: ?/)?>|\s|&#(?:x[0-9a-fA-F]+|[0-9]+);| )*$ 本文中に数値参照入ってるから面倒なんだな >>296 ,297 レスありがとうございます! ああっ、すみません! 使ってるのはChMateです。 >>297 せっかく教えて頂いたのに肝心な環境をお伝えしてなくて申し訳ありません。 スマホのAndroid 8でChMateと言う専ブラを使ってます。 お教え頂いた正規表現自体は入力エラーになりませんでしたが、効果はありませんでした。 2chmateだと環境無いし分からんな 改行の表現あたり直せば動くんじゃなかろか >>300 レスありがとうございます。 本文中に数値参照入ってる…と言う事は、私からは本文が見えないだけで、本当は何らかの本文があるんですね。 もう少しググってみて手掛かりを探してみます。 ありがとうございました。 >>301 >>297 で改行コードが<br>じゃなく\nでも、800は消えると思うんだが これで消えないとすると、(?i:)が解釈できないのかもしれない 5chのdat上は、改行は<br>しかあり得ないのでもっと簡略に書いてもいいし 文字参照の16進表記は無効なのでこれも必要ない ^(<br>|\s|&#[0-9]+;| )*$ これでダメなら、<br>のかわりに[\n\r]を書けばいい ところで、くだんのレスには、半角空白が文字参照で書かれているわけ &#32; (実際には&は半角の&) 5chで空白文字は、 &#32; &#160; &#8194; &#8195; &#8201; &#8203; &#12288; したらばで空白文字は &nbsp; &ensp; &emsp; &thinsp; &#160; &#8194; &#8195; &#8201; &#8203; なおしたらばで中身の無いレスは上記の表現では何故かNGできない(^$ならOK) http://jbbs.shitaraba.net/bbs/read.cgi/internet/8173/1426610041/659 >>302 レスありがとうございます。 そこまで親身になって頂いてとても嬉しく思います。 ですが、全てのパターンで試してみたものの、無情にも効果がありませんでした…。 ChMateはレスを長押しでNGに登録出来る機能もあるのですが、普通なら http://imgur.com/4eGdel7.png こんな風にNGWordを選択出来るのですが、あのレスでそれをすると http://imgur.com/pJn3HBT.png なんと選択肢からNGWordが消えてしまうという…。 これはもう、ChMateがNGWord出来ないレスですよと判断しているようなモノだと思って、諦めることにします。 とても参考になる解説まで教えて下さってありがとうございました。 ツイッターのハッシュタグ抽出したいんだけど、おすすめの正規表現教えてください >>304 >>1 > ・質問も大歓迎。使用言語を書くのを忘れずに。 正規表現の用語の英和対訳表みたいなのあったら教えてください 詳説正規表現(中古で買った第2版)読んでるんだけど、前後読み、先読み、後読みとういう用語で絵混乱しました。 というのは、例えば 日本語訳の、「前後読みの一つである先読みは」は原文では、 One type of lookaround, called lookahead になってます。 look aheadの意味はweblioによると (1) 前方を見る. (2) 未来のことを考える; 将来に備える. となってるので、 時系列の後先を意味する「先読み」ではなく、方向を示す「前方読み」だと分かってれば理解しやすいのに、と思ったからです。 ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ 言語はjavascriptですがjavaの処理を借りて使ってるみたいです やりたいことは 「V2Cの書き込み時、URLに?があったら警告を出したいが、Youtubeサイトだけは除外したい場合」 正規表現でどう書けばいいかわからないので &&条件にして回避しましたが1つの正規表現で可能ですか? ソースはこれです var ph = java.util.regex.Pattern.compile('ttps?([-_.!~*\'()a-zA-Z0-9;:\@&=+\$,%#/]+)\\?'); var ph2 = java.util.regex.Pattern.compile('youtube');//除外サイト >>309 var ph = java.util.regex.Pattern.compile('(?!.*(youtube))ttps?([-_.!~*\'()a-zA-Z0-9;:\@&=+\$,%#/]+)\\?'); これにしたら出来ました 1つにまとめるのが必ずしもいいとは限りませんよ 処理スピードは確実に遅いですそれ.. 正規表現の否定は難しいので正規表現に不慣れならなるべく避けたほうが無難です Perl 5互換の正規表現エンジンで、 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 This is a pen. これを "ABCDEFGHIJKLMNOPQRSTUVWXYZ"|abcdefghijklmnopqrstuvwxyz 0123456789 This is a pen. としたいのですがどうすればいいのでしょうか? gオプションを外せば「[\r\n]」で初回の改行のみにマッチできるんですが それができないツールなので指定できません 他の方法で初回の改行だけにマッチさせる方法を教えてもらえないでしょうか よろしくおねがいします シングルラインモードで改行文字除外して先頭からマッチすればいいんじゃねーの? /^([^\x0A\x0D]+)(?:\x0D\x0A|[\x0A\x0D])/"$1"|/g https://regex101.com/r/TW7wpm/2 マルチラインモードしかダメってんなら /^((?:(?<!\x0A|\x0D).)+)(?:\x0D\x0A|[\x0A\x0D])/"$1"|/gm https://regex101.com/r/TW7wpm/1 あ, 開始デリミタあったな, マルチラインモードでもこれでいいや /\A([^\x0A\x0D]+)(?:\x0D\x0A|[\x0A\x0D])/"$1"|/gm https://regex101.com/r/TW7wpm/3 >>314 完璧に動作しました。 助かりました。 https://regex101.com/ で試していたのですが 結果までリアルタイムに見れることも気づいてませんでした 本当にありがとうございました。 教えてください 日付を処理するにあたり 2018-07-09 もしくは 7-9-18 のどちらがきても$1月$2日を7月9日にしたいと思っています。年は不要。 (?:20[12][0-9]-0?)?(1?[0-9])-0?([123]?[0-9])(?:-[12][0-9])? で一応うごいてるのですが、もっとスマートにできますでしょうか? PHPで一番最後のカギカッコとその先を消したい時 $text = 'あいうえお「かきくけこ」「さしすせそ」たちつてと'; ↓ $text = 'あいうえお「かきくけこ」'; $text = preg_replace("/「[^「」]*」.*/","",$text); では元の文字列のまま返されます。 しかし、さしすせそ の部分を sasisuseso にすると成功します。何が問題なのでしょうか? >>316 そもそも処理自体が正規表現に向いてないと思うんですけど >>317 それ全然ダメでしょ *はgreedyだから最初にマッチした括弧以降全部食う あとPHPならuオプション使うべき /(「[^「」]*」)(?:(?!(?1)).)*$/ https://regex101.com/r/AKpqav/2 何か正規表現でももっと賢い方法ありそうだけど思い浮かばなかった >>318 ありがとうございます。半分くらいしか分かりませんがうまくいきました。 $text = preg_replace("/(「[^「」]*」)(?:(?!(?1)).)*$/su","",$text); txtファイルで20文字目で改行したいのです。 20文字目で改行コードを挿入すればいいのかなと思ったのですが、 書き方がわかりません。 よろしければどなたか教えてください。 >>322 レスありがとうございます。 説明が足りず申し訳ありません。 例えばなんですが、秀丸エディタのような正規表現の置換に対応したテキストエディタで <置換前> あいうえおかきくけこさしすせそ たちつてとなにぬねのはひふへほ <置換後> あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ これは5文字目で改行させた場合の例ですが、これを20文字目で改行させたいということなんです。 で、<置換前><置換後>に正規表現でどのように書けばいいのかということなんですが、いかがでしょう? >>323 秀丸 タグ付き正規表現 で検索するといいかも? >>324 検索してみたら、そのものずばりがありました。 【秀丸エディタ】正規表現を用いて指定文字数で改行させる方法 https://nodoame.net/archives/4675 どうもありがとうございました。 書き込めないテスト IllustratorCS以降のスクリプトで縦中横を正規表現でしたいのですが ググっても見つからないので自作しようと 縦書きテキストの縦中横を自動処理 var matchStr = /[0-9]/ ; //これをベースに↓ htt p://d-p.2-d.jp/ai-js/pages/01_scripts/text/index.html#14_text_vertical_folder これだと半角1文字か2文字の数値のみで 小数点が間にあると1文字ずつバラバラに適用されてしまいます 半角数字2〜3文字(以上) かつ 途中に小数点ピリオド有無 を縦中横に 半角欧数字が1文字の場合は 全角に したいです JavaScript 数字とドットを判別する正規表現 ^[1-9][0-9]+$|^[1-9][0-9]+\.?[0-9]+$ htt p://lma ker.blo g17.f c 2.com/blo g-en try-169.html これだとうまく走りません 先頭数字が0でもかまわないので ^[0-9][0-9]+$|^[0-9][0-9]+\.?[0-9]+$ //や ^[0-9]+$|^[0-9]+\.?[0-9]+$ //を試してみましたが 駄目でした NGワードtest回避 頭にマイナス文字が来るのを忘れていました URLは5chのNGワードにひっかかってるみたいで すみません 直接の答えじゃなくてすまんけど。 正規表現で^は行の先頭を意味するけど、それは意図とあってる? 縦書きに紛れる数字って行の先頭とは限らないんじゃないかな。 一度に書けなくてすまん。 $も、あれは行末を意味するからそれも意図とあってるかな? 縦書きする日本語 数字部分 縦書きする日本語 という原稿なら俺のツッコミは余計なのでごめん。 逆に言うとそういう原稿じゃないと機能しないと思うよ。 >>333 ^が行の一番目から数字かどうかを見ていたから $が行末を見ていたから 下のは走らなかったんですね 文中の数字なので、そのご指摘であってます 初歩的な内容ですみません とりあえず頭と尻を取ってみてみます こんな過疎なのにありがとうございます /[0-9]+$|^[1-9][0-9]+\.?[0-9]+/ ; //では駄目でした…… 練習テスト 328nobodyさん2018/09/30(日) 10:50:04.80ID:??? この文字列を ↓こうしたい ヒット希望する箇所=【 】 【328】nobodyさん【2018】/【09】/【30】(日) 【10】:【50】:【04.80】ID:??? 386 や 38.6 みたいな数字だけのも試しましたが 386 には無効で 38.6 は 38 と ピリオド と 6 とに分けられて効きました 正規表現よりスクリプトの中身の処理なのかもしれません う〜ん いま手元に試せる環境ないけど、でもまだ環境を疑う前の状態、正規表現が完成してない状態だと思う。余裕あったら336の最後、試してみるね。 >>336 例文の328nobodyの328は必ず3桁? >>339 >>328 や >>330 の画像のように 必ず3桁とは限りませんですね 4桁以上のこともありますので >>341 プラスマイマスまで処理していただいて ありがとうございます システムのプログラムが本職ではないので こういうのが苦手でした 正規表現処理としては合っているのですが スクリプトは半角数字1〜2文字のみを処理するだけで 3桁数字もプラスもマイナスも小数点も駄目でした 本当にお手間をおかけしました 今回はあきらめてみます う〜ん…… 自分に対して「ガイジ」って言ってくる奴をNGみたいなの出来る? 無理だと思う。どのレス番が自分なのか予め分かってる必要があるけどそれが難しいんじゃないかな。 私たち日本人の、日本国憲法を改正しましょう。 総ム省の、『憲法改正國民投票法』、でググって みてください。拡散も含め、お願い致します。 perlをphp化しようとしています。 perlの$`や$'のようなマッチの前後の文字列を取り出すことはできますか? また、tr/A-Z/A-Z/のような変換は、変換則をいちいち配列で指定しないとできないのでしょうか。 >>346 後者は正規表現じゃなくてmb_convert_kanaじゃあかんの? スレ内のランダムで3回以上繰り返される同一の文章をNGできますか? 細かく説明するとスクリプトコピペ荒らしのコピペ内容が一定期間で変わってしまうというので困っています V2Cの正規表現で似たもの見つけましたが、janeでは使えませんでした。 (?:^|\n)(.{5,}\n(.*\n){0,2})\1{3} Janeはdatは取得したそのままで何も加工しないので 改行は\nではなくて<br>となる また、各行の先頭と末尾に半角空白が付加されている 実際にレスがどうなっているのかはdatを覗いてみるのが一番 JavaScriptで <table class="aaa" border="1" xxx="yyy" ...(略)> これを .replace( /class="(S+)"/g, '.$1' ) で、 <table .aaa border="1" ....> の形にすることができました。 今度は <table class="aaa bbb ccc (略)" border="1" xxx="yyy" ...(略)> これを、border以降を巻き込むことなく <table .aaa .bbb .ccc (略) border="1" ...> の形にしたいのですが、どうすればよいでしょうか…? 「=」を含まないようにすればいいんだとは思いますが、なんだかごちゃごちゃするばかりでうまくいきませんでした。 その後色々試して見た結果 replace( /class=["\s]((.+)+)"/g, '.$1' ) とすることで <table .aaa bbb ccc (略) border="1" ...> の形にすることができました。 しかし、.aaa .bbb .ccc のように繰り返して「.」を付加する方法がわかりません。 おとなしく2回に分けて置換するほかないのでしょうか? replace( /class="(.+\s)?(.+)(\s.+)?"/g, '.$2' ) …これだと1回しか置換できませんね… すいません質問させてください 専ブラアプリのchmateで連続投稿、連レスをNGに出来ませんか? 連続でなくても、同一IDで沢山書き込んでいるのをNGにしたいのです 毎日NGIDとして登録すれば済む話しなんですが‥ 正規表現で一定数以上の書き込みをNGにしたいのです よろしくお願いします 「あいう えお」 『かきくけ こ』 のような場合に改行を詰めたいのですが ^[」』](\r?\n) を置換して消そうとしてもうまくいきませんでした どうすれば詰めることができるでしょうか (使用環境はAutoHotkeyです) >>354 違ってたらごめんだけど、^の後に何がきても的な指定が足りてないんちゃう? 行頭、ほにゃらら、」または』、改行 とするのがいいんじゃないかなぁと。 >>355 あ、^は行頭ではなく、[]内の否定でした… 」や』で終わってたらOK(置換しない) 」や』以外で終わってたら、改行コードを削除して詰める という感じです ^(.+)[^」』]\r?\n なんか違いますね… 試しにこれでやってみると 「あいう」 『えお』 「かきく けこ」 が 「あいう」『えお』 「かきく けこ」 になるので逆っぽい… どうも[^]による否定ができていない気がします 一応、AutoHotKeyの正規表現でも[^]による否定はできるはずなんですけど 教えて下さい。 !と!に該当させたいけれど、!?と!?の場合は除外したい場合、 どのような正規表現になるでしょうか。 質問スレ2つもあるけどどっちかにまとめたほうがいいな Regular Expression(正規表現) Part14 https://mevius.5ch.net/test/read.cgi/tech/1489511075/ アドレスを編集しているんですけど :80だけ消してたとえば:8001,:6080とか 80が含まれる数字は残したいんですけどどうやればいいんでしょうか さくらエディターつかってます PHPで改行以外の制御文字を空文字に置換したいと思い次のように書きました。 preg_replace( '/(?!\n)[\p{Cc}]/u' , '' , $ver ); この場合、否定先読みで\nを指定しているのですが、\rも指定した方が良いのでしょうか。 詳しい方、アドバイスをください。 よろしくお願いします。 そういえば\Rは\rや\nにマッチするって見かけたけど、間にある垂直タブや書式送りにもマッチするよな 鬼太郎実況スレに現れる軍オタ荒しはどうNGすればいいんでしょうか 荒らす個々の文が違うのでやってもやっても消えません GreasemonkeyのスクリプトでニコニコのコメントをNGにするため 正規表現がうまく適用できなくて 任意の文字列が4字以上連続 .{4,} スクリプトのほうの問題ならあきらめます 「任意の一文字と複数のスペース」を3回以上繰り返す文に合致する正規表現 (.[[:blank:]]{2}){3} で↓の文にヒットしてくれないんだけど理由分かる方いる? や め ろ ー ! し ゅ ー く ん の が 画像のように他の文にはヒットしている https://i.imgur.com/mMhnds9.jpg >>370 ありがとう {2}を{2,}にしろってことだよね 上手く動きました! phpで掲示板を作っていてアンカーリンク作りたいと思い以下のように書きました preg_replace("/>>([0-9]+)/","<a href=\"?res=\\1\"> >>\\1</a>",$text); >>1 など単発の場合は↑でできましたが、>>1 ,2,3や>>1 ,2,3,10-15とやりたい場合どうしたら良いですか? 5ch閲覧にrep2を利用しています。 文末に「>>1 」が入っているレスを正規表現を利用してあぼーんしようとしました。 rep2だと行末に半角スペースが入るために (>>1 )\s$としたのですがうまくいきません。因みに「>>1 」を他の日本語に変更すれば 期待通りの結果は得られるのですが。どの表に表現すれば良いのか教えて頂けないでしょうか。 上の質問をしたものです。 &gt;&gt;1<\/a>\s$ を半角で記述すれば目的を達成することができました。 お目汚し失礼しました。 chmateのNG設定で 複数のワードを全て含む書き込みをNG (?s:^(?=.*ワード1)(?=.*ワード2)(?=.*ワード3)) の ?s:^ と?=はどういう意味ですか? >>375 超いまさらだけど一応 ?s:^は文章全体から検索するよって意味 ?=は、ワードを含む(検索する時にマッチする)って意味 (?=あいう)だったら「あいう」があるレスがマッチする # h1 ## h2 これにマッチする正規表現はどう書けばいいんでしょうか? # h1にマッチさせたい場合、以下のようにしましたが、h2にもマッチします # .* h1のみ、h2のみにマッチさせる書き方はどうしたらいいのでしょうか PLAN PLAN2 PLAN3 PLAN4 以上の4つを表す正規表現についてですが ^PLA(N|N[2-4]) で合ってますか? >>380 合ってるけど ^PLAN[2-4]? でいいんじゃないか ところで、後ろはどうするんだ PLAN5 とかでもPLANにマッチするけどいいのか スマホのブラウザ(Berry browser)での検索結果にでたYouTubeのリンクを NEWPIPEで開くようにする正規表現をおしえていただけませんか? 正規表現ってこういうのも出来ますか? あ い う え お が「順不同」で「全て含まれている」のを検出 (1) ヒット例 ーーーーあいうえおーーーー ーおーえーうーいーあーー ーーーおあーーいいええーーう (2) スルー例 ーあいうえーーーーー ーおういあーーーーー みたいなの1行の正規表現出来ますか? 複数文字列のANDの基本 ^(?=.*文字列1)(?=.*文字列2)(?=.*文字列3)・・・ これで行けました >>375 ありがとうございます ^.{0,20}$ 20文字以下の短文をNGにしたいんですけどアンカーが付いてるとスルーされてしまいます どうやって改善したら良いですか? 基礎的なことですみません、一応調べてはみたのですが JavaScriptで改行コードを消す場合 str.replace(/\r\n|\n|\r/g, '') は理解できますが str.replace(/[\r\n]/g, '') ではだめでしょうか? ChMateのNG機能で、レス本文に順不同で含まれる "あ" に5回マッチさせる際の書き方を教えていただきたいのです こんな↓感じの毎回微妙に違う意味のないレスをポイしたいのです うあいうえああえあかあたま read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる