1 :
nobodyさん :
2012/09/19(水) 18:58:43.51 ID:bdgNsY2f
|:::ハ:.:.:.:.:.:i:.:.:i.:.:i./.:.://メノ 左ォ}::::ノ::ノノ
|::::i:::';::::::::l、::i:::ハ:/,ィチ爪' {ヒチ'!::イイ
|ハ::::::ヾ::::ハ 'Vリ ゙´ {、込ソ ゛″!:::i:.:l
|:.::ト、:.:.:ヾ:.ハーi| :::::::: 〉 ノ::::i::.|
{:.:.ト、ヾ.:.:.:ヾハ lト、 _, , イ:.:.:.:i.:ハ
ヾ::ヽゞ、\.::.\!! ヽ、. ´ /!.::!.:.i:.:!:.!:l
>>1 乙ぱい
, '" ヾ\ \:::::::::k /` ー ' `メ'リ:.:.ノ.ノ:ノノ
/ 川 リllVハ. ( i `\ ,イイ// //
/ |l ̄`ヽ ノ `メ、
,/ {:} `ー'- ニ_
,/ _∠ |l \ , \
/ _ ,. イ´: |l \ ,λ
/ -‐‐‐-<´ .! / |l ' , _,ィ'ンy}
〈 \ .ノ`ー斗rェ,,_,_,_|l ,.ir'彡イy-´ !
`ヽ、 ` ' <._ {jt=t-t-ミ`^Yーrヘr-彡'水k} !:} .ノ
` ー- .._ ` -ヽ. l`亠^{:i ̄ {:リ |ハ ノノ/ノ
_,. -‐ '  ̄ ´ ̄` ー- 、 \{{ {:l {:i ノ_,ィニ_ン´
// `ヽ 、\ \ {:l {∠ニァ--'
/ / `ヽミニ>ァ┴ '´
/\V| /
./ ヾ.、 ,. ' ´
5 :
nobodyさん :2012/10/19(金) 12:38:26.99 ID:ZQDqri43
過疎スレ状態になっているっぽいですが質問宜しいでしょうか?
質問は?
>>5 の人とは別人ですが質問がありますのでお願いします
拒否したいワード例
・ばか
・ばっかやろー
・ばーか
掲示板の拒否ワード機能を使って上のような言葉を
^(ばか|ばっか|ばーか)
このようにまとめているのですが、
もっと効率よくまとめられるような気がしています
^ば(0または任意の1文字)か
以上のように、
まとめることは可能でしょうか?
ば.?か ばいか(売価)とかも入るけどねー
〜ばかり ばっかり ばんから
ばんかい
バイカム
こういうのは
>>8 の指定の方が間違いがないね
12 :
8 :2012/10/31(水) 12:31:50.64 ID:???
まさに、
>>9 のようにまとめるられる書式を知りたかったのです!が…
皆さんご指摘のことを読むと確かにおっしゃるとおりですよねー
ば.?か、のような書式で運用できるかできないか、
掲示板のログとにらめっこしてみることにします
ともあれ、お答えくださった皆さん、とても参考になり助かりました
ありがとうございました
せめて同じ文字はまとめるか ^(ば(か|っか|ーか))
14 :
nobodyさん :2013/02/10(日) 11:51:32.02 ID:m9q+FHWZ
パスワードの登録で 半角アルファベットと半角数字の組み合わせで8文字以上 という条件を考えてるんですが、以下じゃダメですよね? preg_match('/^[a-zA-z0-9]{8,}$/', $s); アルファベットと数字の組み合わせ(アルファベットも数字もどちらもある)とするには どうしたら良いでしょうか?
>>14 みたいな正規表現のちょっとしたテクニック集とかどっかにまとまってないかね?
/^(?=(.*\d[a-zA-Z].*)|(.*[a-zA-Z]\d.*))\w{8,}$/ 数字英字 もしくは 英字数字という並びが存在する英数字8文字以上
>>16 を1回チェックするのと、
>>14 と「英字を含む」「数字を含む」の計3回チェックするのとで、どのくらい
ここまで書いたところで自分でいろいろ試してみた。
$s = '3066058kczgr9784685fwn874fos847fos8djtkcrzu9q58nzfc';
for($i=0; $i<1000000 && preg_match('/^(?=(.*\d[a-zA-Z].*)|(.*[a-zA-Z]\d.*))\w{8,}$/', $s); $i++){} //2.3948659897 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && preg_match('/[a-zA-z]/', $s) && preg_match('/[0-9]/', $s); $i++){} //5.7406949997 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && !preg_match('/^[0-9]+$/', $s); $i++){} //3.9960801601 sec.
for($i=0; $i<1000000 && 8<=strlen($s) && ctype_alnum($s) && !ctype_digit($s); $i++){} //2.2285568714 sec.
$s = '1';
for($i=0; $i<1000000 && preg_match('/^(?=(.*\d[a-zA-Z].*)|(.*[a-zA-Z]\d.*))\w{8,}$/', $s); $i++){} //0.0000748634 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && preg_match('/[a-zA-z]/', $s) && preg_match('/[0-9]/', $s); $i++){} //0.0000240803 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && !preg_match('/^[0-9]+$/', $s); $i++){} //0.0000209808 sec.
for($i=0; $i<1000000 && 8<=strlen($s) && ctype_alnum($s) && !ctype_digit($s); $i++){} //0.0000181198 sec.
おもしろかった。
^([a-z]|[A-Z]|[0-9]){8,}$ はダメ?
ダメ
>>19 大文字と小文字を区別したいってことなら
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]{8,}$
でおk
22 :
nobodyさん :2013/03/18(月) 20:02:10.97 ID:XSCUuGgi
すっごい初歩的だったらすまそ
http://www.rider-n.sakura.ne.jp/regexp/regexp.php で試す限りはうまくいくんだけどPHP上でうまくいかない。
スクリプト SJIS
マッチング文字列 SJIS
PHP内部文字エンコ SJIS
の環境下で
【サッカー】xxxxx【野球】
で最初のサッカーだけをマッチングしたいので
/^【([^】])】/i
としているんだけど、サッカーの時はマッチしない。
【テニス】xxxxx【卓球】ならちゃんとテニスがマッチする。
なんで?(´・ω・`)
>>22 それだとテニスもマッチしないはずだが
[^】] は「 】」以外の1文字ってことになる
それとShift_JISなんて捨ててUTF-8使おうぜ
24 :
nobodyさん :2013/03/18(月) 22:12:52.90 ID:XSCUuGgi
>>23 すません、[^】]+です。
SJISで何とか…
mb_regex_encoding("sjis"); mb_ereg ("^【([^】]+)】" ,$txt,$ret); pregはSJIS使えません
>>22 文字列をアスキーコードに変換してから検索しろ
javascriptでの正規表現で質問があります。 /^(?:(?:http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)*$/ 上記はURLをチェックする簡単な正規表現だと思うのですが そのURLがRSSかどうかチェックする正規表現にしたいのです RSSの拡張子は .rss .rdf .xml です。 URLの最後の拡張子にこの文字列が入ってるかチェック出来るようにしたいのですが どうすればいいでしょうか? お願いします。
最後をこれに差し替え \.(rss|rdf|xml)$/
[^\\/:,;*?"<>|]\.(rss|rdf|xml)$
>>30 お礼遅くなってすいません
ありがとうございます!
うまくいきました!
32 :
nobodyさん :2013/07/20(土) NY:AN:NY.AN ID:75R8ikZF
PHPのpregでの正規表現について質問です。
<a href="
http://www.test.jp/ " title="test"><img src="test.png" alt="ALT" title="TITLE" /></a>
上記のようなHTMLを正規表現でヒットさせ、
<li>TITLE</li>
に変換させたいのですが、正規表現ではどう表したらいいのでしょうか?
保守
34 :
nobodyさん :2013/07/25(木) NY:AN:NY.AN ID:2TH+2Iiw
正規表現で解決できるのではと思い、こちらで質問させてください。 "ver.2 test.Test"という文字列を"ver.2 test. Test"のように ピリオドの次の文字が大文字のときに限り半角スペースを挿入したいのですが 良い方法はないでしょうか?
35 :
34 :2013/07/25(木) NY:AN:NY.AN ID:???
>>34 です。
正規表現のグループ化を用いることで解決できました。
安易に質問を投稿してしまい申し訳ございませんでした。
せっかくなのでその正規表現を書いておきますねくらいの気持ちが必要だ。
>>34 preg_replace('/\.(?=[A-Z])/','. ',$str);
>>32 見ての通り超手抜きだけど例の通りか属性値のダブルクォートが無いぐらいならこれで大丈夫
検索文字列: /^(.+<img.+title=\")(.+)(\" \/><\/a>)$/
置換文字列: <li>$2</li>
http://regex101.com/r/qI6aG4 > PHPのpregでの正規表現
実はPHP分からないんだけど↓みたいな感じ?w
preg_replace("/^(.+<img.+title=\")(.+)(\" \/><\/a>)$/i", "<li>$2</li>", $input_lines);
39 :
nobodyさん :2013/09/14(土) 18:05:14.35 ID:0qKO1mtd
質問です。 PHP5で preg_match ("/.*'.*/s", $_POST["value"]) としたときにvalueに「'」があってもマッチしない場合があるらしいのですがどういう文字列の場合でしょうか? preg_matchはPCRE関数でPerl互換です。マルチバイトに対応していないのでその辺りに落し穴があるのかなと思うのですが。
40 :
nobodyさん :2013/09/14(土) 19:42:16.21 ID:QgtFjJm6
>>39 マッチしない場合があるとは思えないけど、一応マッチしない場合があると言った人に聞いてみれば?
まぁ、$_POST["value"]が送信されて来なければ話は別だけど・・
ちなみにそれは preg_match("/'/", $_POST["value"]) のようにシンプルに書くこともできる
>>40 使ったこと無いけど、"韓国"だったら完全一致なのでそのまま正規表現使わずに書けると思うけど
2ch専ブラにおける2chmateのデバッグ用文字列のみの書き込みをNGにしたいです 2chMate 0.8.5.6 dev/HTC/HTL21/4.1.1 2chMate 0.8.5.4/SHARP/SBM003SH/2.3.4 ↑こんなやつです 一応専ブラはjanestyleということでどなたか教えていただけませんでしょうか
44 :
nobodyさん :2013/09/16(月) 04:52:23.59 ID:V1KLg8Lz
韓|トンスル|ニダ|
45 :
39 :2013/09/16(月) 18:13:41.90 ID:???
>>41 マッチしない場合は無いようでした。
phpの設定の問題でpreg_matchがマッチできずfalseを返す場合があるらしいです。
46 :
nobodyさん :2013/09/19(木) 16:03:12.92 ID:XGTpu0pg
最近2ちゃんで同じ文字列を数行繰り返す荒らしがいますが 最近2ちゃんで同じ文字列を数行繰り返す荒らしがいますが 最近2ちゃんで同じ文字列を数行繰り返す荒らしがいますが ↑こんな感じです 改行を挟まない場合もあります Janeでこれをあぼーんしたいんですが 同じ文字列が数行続いたかを調べられる正規表現はありませんか
48 :
46 :2013/09/19(木) 23:50:13.04 ID:???
>>47 ありがとうございます
無事あぼーん出来ました
直前の自分のレスも消えてます
49 :
nobodyさん :2013/09/22(日) 00:52:59.03 ID:PBzP1rLU
下の文字列から最短で「NN are_VBP strongly_RB supported_VBN」を抜き出すのに NN\s.*?VBNでうまくいかない(最長マッチが返ってくる)のですが、何が悪いのでしょうか? In_IN Israel_NNP ,_, freedom_NN of_IN opinion_NN and_CC risk_NN taking_NN are_VBP strongly_RB supported_VBN ._.
50 :
nobodyさん :2013/09/22(日) 02:25:21.73 ID:V8cai0+K
それだと最初に出現するNN\s位置からマッチングが始まって、 最短で後続するVBNまでがマッチする こうじゃないか? .*(NN\s.*?VBN)
51 :
49 :2013/09/22(日) 08:30:46.88 ID:???
>>50 ありがとうございます。
しかし、、、.*(NN\s.*?VBN) だと、今度は、行全体がマッチしてしまいます。。。
ムムム
NN arからじゃ駄目なん?
NNじゃ
>>50 の言うとおり最初のNNからマッチするんだし
53 :
49 :2013/09/22(日) 15:17:49.08 ID:???
>>50 >>52 ありがとうござしました。
プログラム板でも聞いてみたところ、下のような表現を教えてもらいました。
NN\s((?!NN).)*?VBN
>>53 結果教えてくれてありがと
前方参照否定位置指定子かー
NNが来ないNN空白〜VBNにマッチするのね
ええい、お前はもう下がっておれ webprog板の面汚しめ
php使いが鼻で笑われる所以(´・ω・`)
(´・ω・`)←この顔文字、3年ぶりぐらいに見たw
PHP5.4です。 'hoge山田 太郎2様hoge' (2の数字は色々変わります) の中から'太郎2様'をマッチさせたいのですが /山田[\s\S]*?(/太郎.*?様/u)様/u でうまくいかないです。どなたか教えて下さいまし。。。
太郎\d+様
行の最後に[a-z0-9]が9文字、はどう指定するんでしょうか ([a-z0-9]){9}$ $(([a-z0-9]){9}) と思ったのですが、うまくいかないです。
[a-z0-9]{9}$
ありがとうございます!
65 :
nobodyさん :2013/10/31(木) 18:34:38.76 ID:GYE7WPbH
ab(cd)efg とある時 (.*?) で"(cd)"は返ってきますが、 "cd" とカッコの中身だけを取りたい時はどうすればいいでしょうか "(" と ")" を置換するしかないですか?
言語、、つか環境は?
67 :
nobodyさん :2013/10/31(木) 21:18:35.06 ID:odoD21Ul
エスケープしろよ
PHP5で パターンは、/<a>.*<\/a>/ 対象文字列は、<a>テスト1</a><a>テスト2</a> preg_match('/<a>.*<\/a>/', '<a>テスト1</a><a>テスト2</a>', $result) でマッチした文字列は、 $result[0]:<a>テスト1</a> $result[1]:<a>テスト2</a> となることを期待しているのですが、 実際は、 $result[0]:<a>テスト1</a><a>テスト2</a> となりました。 <a></a>は独自タグで間に入る文字列長、フォーマットは不定です。 どうすれば期待通りの振る舞いに出来るでしょうか?
68です。 すみません。訂正します。 × preg_match('/<a>.*<\/a>/', '<a>テスト1</a><a>テスト2</a>', $result) ○ preg_match_all('/<a>.*<\/a>/', '<a>テスト1</a><a>テスト2</a>', $result)
70 :
nobodyさん :2013/11/30(土) 00:49:11.30 ID:ykQSlGiP
?
正規表現の練習になるお題ください
>>71 お題が欲しけりゃJaneのReplaceStr.txtとかNGEx.txtとか自分でいじってみればいいんじゃないの?
練習はReplaceStr Toolでやれるから。
グループ化を使って解析させると幾分わかりやすくなる。
73 :
nobodyさん :2013/12/08(日) 20:14:52.93 ID:1LHzvpJQ
おしえてください。 テーブルタグで囲っている、下記のような HTMLの表があります。 名前 | ふなっしー 住所 | 東京都港区赤坂 電話番号 | 090-0000-0000 ふなっしー 東京都港区赤坂 090-0000-0000 という結果を期待して 名前(.*) 住所(.*) 電話番号(.*) と書いたんですが、使い方を間違っているのか? うまくいきません。 他の記述方法はないでしょうか?
74 :
nobodyさん :2013/12/20(金) 03:59:14.24 ID:JjVtc12l
>>72 ReplaceStr Toolって?ググったが出てこない
ある文字列を含まないものにマッチする正規表現 (?:(?!foo).)* ^(?:(?!foo).)*o$ → 「foo」 にマッチ出来ない。 先読みを使わない正規表現ならマッチ出来る。 → (?:(?!foo).)* は厳密には間違い。 Q、では先読みを使って正しく動作させるにはどう書くべきか?
お望みの先読み使って書くなら /fo(?!o)/ だろうが、 こんなの使うくらいなら if (/foo/) { } else { ※ここに書いたほうがいいに決まってる } で、もはや正規表現使うコストももったいないくらいだから 普通は strpos()みたいな関数使うべきだろう。
84 :
nobodyさん :2014/01/19(日) 15:12:27.67 ID:U6WWS19r
先頭一致とか後方一致はsubstr使ってる iオプション必要なら代わりにlc
c
>>83 >>82 の内容を理解出来てないね・・
(?:(?!foo).)* → fo にマッチ
o$ → o にマッチ
これ足して foo にマッチ「する」のが期待する文字列否定の動作。
fo の中に foo は含まれていないので fo にはマッチしなければならない。
>関数使うべき
マラソン選手に車使うべきって言ってるようなもん。
うーむ、オートマトンの勉強というか、まだ触りしか学んでないんだが 既に文字列否定の正規表現を簡単に作れるようになってしまった。 チャリの運転と同じで、一旦出来るようになるとなんてことないね。
(次のお題) abc かつ def を含まない文字列を表す正規表現を作れ。ただし先読みはNG。
90 :
nobodyさん :2014/01/25(土) 14:00:24.10 ID:peRg4Ln+
お題が提示されておりますが、質問よろしいでしょうか。 言語は Java(Android開発) です。 やりたいことは、 ・'a', 'b', 'c', '*' の4つの文字が使われた文字列を分割する ・'a*', 'b*', 'c*' は1文字として扱い、'*'のみの物は無い になります。 例えば "aba*cb*" の場合は a b a* c b* に分割したいです。 どのように書けば良いのでしょうか、ご教授願います。
91 :
nobodyさん :2014/01/25(土) 17:37:15.39 ID:VUYYCfMh
([abc]\*?)
93 :
90 :2014/01/26(日) 13:40:59.38 ID:???
>>91 ありがとうございました。勉強になります。
>>92 >>1 も読めない糞は2chには向いていないと思うよ。
もう何十年も居座っていると予想されるが、そろそろ自覚しなよ。
ここはもう荒らしの本拠地になってるから仕方がないよ。 わざわざ煽りにム板まで出張してきてるし。
こちらは精神異常者の隔離スレとなっております
レベル高いスレにただいま。
荒らしの住み処 ただのクソスレ
ところで向こうの267は雑技たんなのかな?266、雑技のネタに使ってもよかですたい。
>>99 当たりw
266の書き方は考えたけど,今回のケースでは267の書き方で大丈夫と考えた.
そういや質問者は「1」を含まないって書いてあるのに,なぜ「123」? とは思ったなw
後ろに他の正規表現を続けたりするとバックトラックして,
271の通りの可能性があるから初心者には266の方がいいのは確か.
ただ,他にもいろいろ考え出すと,最も内側のものだけ削除したいのなら,
ABC(?:(?!123|ABC|DEF).)*DEF
と書いた方がいいとかもある.
ちなみに266のミソは↓の辺りで微妙に使っていたりする.
http://www.din.or.jp/~ohzaki/regex.htm#NoEndTag
>>100 ああ、考えてみればABCも入れたほうがいいね。質問者の対象データが対になってる
データだったから必要性を感じなかったが入れるべきだった、さすが雑技たん。
>なぜ「123」?
1というのは実データとは違う省略形と考えた。
初心者には文字と文字列の違いが分からないから文字列のつもりで1と書いてしまった
可能性がある。そこで文字列に対応しておけば1文字にも対応出来るってわけ。
>ABC(?:(?!123|ABC|DEF).)*DEF
これが基本形やね。高速化するなら*+とか、もっとやるなら[^1AD]*+使ってごちゃごちゃ書いたり。
>NoEnd
ミソは否定の中に分岐を入れることだからそれとはちょっと違うw
それと <\2> だと <font> になってしまうで・・ <\2\b やね。
>>101 >1というのは実データとは違う省略形と考えた。
なるほど.確かに,初心者ほど状況説明が下手だからね.
>それと <\2> だと <font> になってしまうで・・ <\2\b やね。
単純なミスだな.指摘ありがとう.
・範囲内で文字列を含まない正規表現
$_ = "zzzABC XYDEFzzDEFz";
if ( m/
# Perl 5.10 以降で有効
ABC
[^XAD]*
(?:
(?!XYZ|ABC|DEF).
[^XAD]*
)*
(*PRUNE) # バックトラックステートの削除
(*SKIP) # 次回の走査開始位置をここに飛ばす
(?:XY?)? # XYZとDEFの競合を想定した取りこぼし回収
DEF
/xgsiaap )
{ print "match! <".${^MATCH}.">"; }
else
{ print "no match."; }
>>102 修正乙!
修正乙の後でアレなんだけど、実際に動かしてみたらだいぶおかしいから手直ししてみたよ、と。 while ($html =~ / <(NOBR|CODE|B|PRE|FONT)\b (?= ( (?:(?!<\/\1>).)*? (?:<\1\b|$) ) ) /sixg ) { print "<".$1.$2, "\n"; } ------------- perl.htm ------------- <b><font><pre><b>aaa ------------- perl.htm ------------- *? はなるべく使いたくないなぁ・・ [^<]*+ を使って最適化したいw
>>103 (*VERB:ARG) ってのは知らなかったなぁ.
今回のケースだと(*PRUNE)は(?>pattern)で置き換えができると思うが,
マニュアルの 「(*PRUNE) は (?>pattern) 単独では表現できないケースを扱うために使えます。」ってのがどういうケースなのか想像できん.
>>104 修正ありがと.
元のやつだと後ろを吸い込んじゃうからマッチ位置が先に進んでしまう.
そうならないように先読みを使うと,先読み部分は後方参照に含まれなくなるから,先読みの中で改めて補足が必要って感じだね.
>>105 >単独では
・・・ ( ・・・ (*PRUNE) )
みたいに ( ) で分断されてる場合とか? (?> だと2つ以上必要になる。
>マッチが先に
当たり〜。printのとこは""の中にまとめて書いても大丈夫だったのか、勉強になりますた。
改めて修正乙。
>>103 「XYZとDEFの競合」ってのはXYZの後半部分がDEFの前半部分と同じ場合ってことかな?
例えば,xydとdef,とか,xdeとdefみたいな
もしそういう,後半部分と前半部分が重なる場合を考え出すと,話がもう少しややこしくなる.
つまり,ABCDとCDEFがキーだったときに,ABCDEFという文字があったら,
それはABCD+EFと解釈するのか,AB+CDEFと解釈するのか,という問題.
その解釈がすべて前方優先なのか,すべて後方優先なのか,それともキーの相互の優先度で決まるのか,
あるいは,あらゆる可能性を許すのか,あらゆる可能性を許さないのか.
キー自身が重なる場合もある.
例えば,ABCABみたいなキーだったとき,ABCABCABは,ABCAB+CABなのか,ABC+ABCABなのか.
>>106 >・・・ ( ・・・ (*PRUNE) )
なるほど,括弧の深いところで使うと,(?> で表現するのは大変そうだ.
しかも,もしそれが中間レベルで分岐してたりすると,(?> では表現しきれないかな.
>>107 ぶっちゃけその辺は何も考えてない。試作品とかテンプレートみたいな感じで作っただけ。
競合対策の部分は普通の使い方をするならいらないね、HTMLやXMLタグで挟まれた文字列にマッチさせるときとか。
こういうの以外に使い道が思い当たらないし。(だったら付けるな)
>>108 >分岐
なるほど、(?> ではお手上げだ。俺も年末に覚えたばかりでよく分かってない。
## (*COMMIT) $_ = "12"; if ( m/^1((*COMMIT)3|2)/ ){ print "match!\n"; } # 分岐の中で踏まれると以後ほかの分岐要素を走査することがなくなる。 # 現在の分岐要素がマッチ失敗したら全体もマッチ失敗となり検索はそこで完全終了する。 m/^1(*COMMIT)(3|2)/ # 下位層の分岐は走査され、マッチが成功する。 $_ = "12"; @test = $_ =~ m/^1(*COMMIT)A|\d/g; print "@test\n"; # /g でも次位置からの走査は行われない。 @test = $_ =~ m/^1(*COMMIT)|\d/g; # 結果 = 1 2 。マッチが成功した場合は走査を止めることはない。(失敗したときだけ止める)
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>"
126 :
nobodyさん :2014/02/04(火) 20:09:35.38 ID:xuvSG1oC
s/^\./.photo./g 行頭限定の場合
>>124 <検索>
\.([a-z\d]{1,4}"IMG\b)
<置換>
..photo.$1
\. を ( ) に入れてないのは処理効率を上げるため。
「abc」の部分は拡張子と考えて数字も許可した。(1文字以上4文字以下の英数字)
何かまずかったら遠慮なく。
128 :
124 :2014/02/06(木) 18:00:16.14 ID:???
たくさんレスいただきましてありがとうございます お礼が遅れまして申し訳ありません 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"/'; 何故うまくいかないのかよくわかりません。 なにかアイデアはありませんでしょうか?
132 :
nobodyさん :2014/02/09(日) 08:07:39.87 ID:J9pikab5
俺なら /value="([^"]*)"\s+id="latest"/
× ' ' ○ " " というオチ?PHPは触らないから分からない。
134 :
nobodyさん :2014/02/09(日) 17:39:19.85 ID:J9pikab5
PHPなんか触らないから分からないけど両端のすらすらが余計とかなんかね
ごめんなさい、PHPの解説サイト見たら ' ' でOKでした。
PHPスレで聞いたほうが早いかも。原因が改行以外にある可能性も十分あるので 動かないサンプルコードをアップして見てもらえば確実に原因教えてもらえると思う。
↑$source に入るHTMLファイルも見ないと原因が分からない可能性アリ。
再帰と (?( ) yes|no) の組み合わせが楽しすぎる。もしかしたら宝の山かも。 マトリョーシカの中にダルマを入れられる感じ。
>>125 の疑問点
\K が分岐の先頭にあることで処理速度に遅れが出るかどうか調べる。
また、\K を使わない書き方とどちらが早いか調べる。
比較対象追加 (
>>125 ) | (?=ABC) \K ABC
145 :
nobodyさん :2014/03/01(土) 19:39:32.33 ID:n8n41uDi
>>145 2chブラウザ用でいいのかな?処理速度重視で作った。
(?:^|<br>)(?>\s*)・(?>[^<]*(?:(?!<br>).[^<]*)*)<br>(?>\s*)<br>
147 :
nobodyさん :2014/03/01(土) 20:45:21.19 ID:n8n41uDi
>>146 素敵!
神!
すっきりしました!
テキストじゃなくhtmlに対して正規表現だったのですね、勉強になりました。
ありがとうございました!
148 :
nobodyさん :2014/03/02(日) 02:32:48.90 ID:2i/vkXtz
htmlに対してとかじゃなくログに合わせろと
(
>>146 )
(?:^|<br>) は分岐のバックトラックが残るから (?><br>|\A) としたほうが良さそう。
この2つは動作が完全なイコールではないので注意が必要、文頭が <br> だった場合に
絶対に \A がマッチ出来なくなるため。これが問題になることはほとんど無いだろうけど。
ascii抜粋 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
>>142 >Perl6 正規表現 I
ここのサイト主、先読みを理解出来てないな・・。beforeとafterも逆だし。
tes
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
--------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ァアィ
スセソタチッツテトナニヌネノハヒフヘホマミムメモャヤュユョヨラリルレロワヲン
----------------------------------------
文字コードでなくロケールに依存するという発想は思い付かなかったわ、そっちの線で
また実験しながら遊んでみるよ、辞書順とやらも調べてみる。ヒントありがとう。
2ch .scに移転しました。
正規表現道場 Part2
http://nozomi.2ch .sc/test/read.cgi/php/1348048723/l50
■ 2ch.netの問題点
・ 2chscがNGワードになってるので正規表現をスレに貼るのに支障が出る。何より言論統制はイクナイ。
・ 管理人が今後どう動くか予測が付かない。
自暴自棄になりIPや書き込み履歴を大公開して逃走する可能性すらある。会社IPの人は注意。
165 :
nobodyさん :2014/04/12(土) 20:53:07.28 ID:kZRku0LV
もうこっちに帰ってくるなよ
166 :
nobodyさん :2014/04/15(火) 11:21:18.41 ID:qQPWwAKL
使用しているのはYahoo! Pipesのregexです
http://d.hatena.ne.jp/dacs/20080422/1208868051 ○○/△△&#xd;[□□
という文字列から△△だけを抜き出したくて、色々試してみているのですがどうもうまくいきません
".*/" -> replace -> ""
"\&#xd;.+" -> replace -> ""
だと思うのですが、何か間違いがあるのでしょうか?
ちなみに
"[.+" -> replace -> ""
も試してみましたがダメでした
167 :
nobodyさん :2014/04/15(火) 20:38:11.07 ID:CfZz5H/X
Yahoo! Pipesの仕様なんて知らんが 文字列の開始も終わりも指定してないということは .*/で一番最後の/までが対象として消える可能性はある
ファイル検索ツールでパスを入力する時、「\」「/」を入れると候補が0になってしまいます d:\\abc\\123\\ のように入力しているのですが、間違っていますか?
170 :
nobodyさん :2014/05/08(木) 03:20:39.96 ID:Zyar7s4i
そのファイル検索ツールのところで聞けばー
sc連投規制中なう。
(sc
>>212 )
>qr/\"((?:\\[\\\"]|.)*?)\"/
> これはよっぽど自信がないと書けない書き方だ。
今考えると弾たんは単に2文字否定の作り方を知らなかっただけだな・・。
知ってたらこんなあやふやなものを作ろうなんて思わないし。
早さに拘るのに早い正規表現の作り方を知らないというちょっと残念な弾たん。
他の正規表現を見ても正規表現自体のスキルは高くない。
なんでもこなすオールラウンダーだから薄く広くになるんだろうな。
しかしこの程度の正規表現スキルでcpanのモジュール作って大丈夫なんだろうか。
探せばバグが出てきそうな予感。
正規表現のスキル自体とモジュール作成能力には直接的な相関関係はないからなあ・・・
(‥ )フーン
そういう指摘するだけでモノ作ったり貢献してなさそうなお前はもっと駄目な人間だから安心しろ。 弾はなんだかんだ色々作ってるし色々な方面に貢献してる。
指摘することも立派な貢献だと思いますよ。現に指摘によって処理時間が半分以下になってますし。
まだ連投規制が解除されないなう ## m// キャッシュを保持してない状態では空文字列にマッチする。 うっかりするとバグの原因になり得る。
.scの連投規制は俺も食らったけど(専ブラだと「書き込めたかも…」で書けてない状態)、 Webブラウザで投稿したらBOT疑惑なのでCapchaしろになってそれで解除できた。 URLを貼りまくって連投規制になった場合は知らん。
>>178 俺の場合は「連続投稿は禁止されています。Error!」って出るだけ。
普通に連続投稿が原因で規制食らってるみたいだからもうダメかも分からんね。
人が少ないから自然に独り言みたいになるのにそれで規制されたら
ますます人少なくなるなw
180 :
nobodyさん :2014/05/23(金) 20:03:59.73 ID:Hym2JLxi
たらこテョンねるの話はたらこテョンねるでやれ
>>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) の項目を参照。
文字参照の処理、間違えてますよ > 2ch.net
---------------------------------------------------------- my ($hex, $name) = ($line =~ /^([0-9A-Fa-f]+)\s+(.*)/); next if $name =~ /[a-z]/; # range, not character ---------------------------------------------------------- 2行目だけ小文字に限定されてる。これで良いのか悪いのかは分からないが。
本人に直接言う勇気がないらしい。まこと残念な人である 皆はこうならぬように
あれ、/o が使われてる。なんでapache logのltsv変換には 使われてなかったんだろう。ああいう時こそ効果的なのに。
■ combined2ltsv.pl の re で /o の有無をタイム計測 /o なし 12724/s /o あり 31689/s /o あり は2.5倍早い。これは報告したほうがいいかも。
(
>>188 )
---------------
use utf8;
---------------
\d
---------------
弾たんにならこれで通じるだろう。(確信)
↑ /hs/ = ハイスクールでした。
Q、 perlの正規表現では \A\z == ε である。では、 ??? == φ の ??? は何になるか。
if( () =~ "" ){ print "hit\n"; } else { print "no\n"; }; 結果 hit 答え、なし
() と "" を比較して no を返す方法はあるか。( φとεの比較 ) () eq "" () == "" "" eq undef "" == undef () eq undef () == undef すべてtrueが返る。
てすてす &
>>201 それ、お前向けにカスタマイズされてるだけだろ。
こういう陰口叩くやつよりマシ
test
test
207 :
nobodyさん :2014/06/06(金) 06:39:17.80 ID:qyn3RpL3
test
208 :
nobodyさん :2014/06/09(月) 20:39:55.26 ID:Xlk9Lxk9
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になります。
210 :
nobodyさん :2014/06/10(火) 18:29:25.24 ID:pkqjoeBF
このスレって誰かの日記帳スレだったの?
俺のメモ帳だけど?
ならコテ付けろ
## 確率の実験 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|,) タダでスキルアップさせてやったんだから文句言うなっしー。
224 :
nobodyさん :2014/07/28(月) 11:12:01.30 ID:tZb2oMPI
★2ch勢いランキングサイトリスト★ ◎ +ニュース ・ 2NN ・ 2chTimes ◎ +ニュース新着 ・ 2NN新着 ・ Headline BBY ◎ +ニュース他 ・ Desktop2ch ・ 記者別一覧 ◎ 全板 ・ 全板縦断勢いランキング ・ スレッドランキング総合ランキング ◎ 実況込み ・ 2勢 ・ READ2CH ・ i-ikioi ※ 要サイト名検索
> ※ ヤフーのHTMLには javascript が使われており、正規表現がコードの一部に誤爆します。 ・・・ならテストデータ変えろよと。
テストし直すのが面倒でねぇ・・。
preg_replaceで文章内に<br /><br />が出現した以降の文字をすべて削除するのはどうすればいいですか?
2ch専ブラで「1文字だけしか書かれていないレス」をNG処理する場合はどういった表現をすればいいのでしょうか
概出
そこをなんとか
235 :
nobodyさん :2014/12/19(金) 13:42:01.95 ID:fItp7j1V
もとかりやゆいか
236 :
nobodyさん :2014/12/23(火) 07:55:27.87 ID:vHmDJqQI
正規表現で電話番号を確認するにはどうしたらいいですか? 固定番号 携帯番号 フリーダイヤル 国際番号 といったものがあるのでわかりません。(緊急ダイヤル系は無視して構いません) どなたか正規表現を教えてください
電話番号とは何かって質問はスレ違い。 自分の定義する電話番号はこうですって(正規表現以外の方法で)提示してください。
緊急ダイヤル系は無視して構いませんって、つまりそれが何だか含めた電話番号とは何ぞやを 考慮して回答しろって書いてあるじゃねーか。 しるかそんなモン。
241 :
nobodyさん :2014/12/23(火) 13:54:19.46 ID:vHmDJqQI
>>240 ありがとうございます!
参考にしてみます
データから例をあげないと書きようがないよね ハイフンあったりなかったり、それら含めて全部なのか・・・
1.文字列の末尾にある数字を1〜2桁まで抽出したい(末尾に1文字までなら数字以外が入っても構わない) 2.抽出した数字が1桁の場合は先頭に「0」を足して二桁に変えたい これを正規表現1行で行いたいのですが 検索:.*?(\d{1,2})(\D{0,1})$ 置換:\1 これで1つ目はいけたんですが、さらに2つ目の内容を正規表現1行で行うことは可能でしょうか?
244 :
nobodyさん :2015/02/20(金) 16:08:02.61 ID:s+oB9mxD
245 :
nobodyさん :2015/02/20(金) 20:10:32.19 ID:kYODqEh/
アフィ注意
間違いあるしまとめすぎてて意味不明だしゴミだ。
247 :
nobodyさん :2015/02/22(日) 14:01:19.31 ID:q7pjx80v
>>244 しっかり纏められて助かります^^b ありがとう!
ゴミの分際で広告主張しすぎなんだよ
249 :
nobodyさん :2015/02/23(月) 11:36:18.61 ID:b/xiRyE3
> \G 直前の一致文字列の末尾 こう覚えちゃう人多いんだよねぇ。こういうサイトが嘘広めてるんだろうな。
251 :
nobodyさん :
2015/03/01(日) 14:12:05.46 ID:X4Lz0t7X お前はいったい何なんだ? 必死に勉強したわけでもなく、必死に働いたわけでもなく 何も築かず、耐えず、乗り越えず、ただダラダラ過ごし 自分の都合の良い妄想だけを垂れ流す。 お前は今のゴミみたいな人生を、今は仮、本当の自分を使っていないだけ そう飽きず言い続け、結局はそのまま死ぬ 最底辺キモヲタで底辺人生の今が本物であることに、そろそろ気が付こうぜ!