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


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

正規表現道場



1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY]
【正規表現道場の掟】

・言語不問

・質問も大歓迎。使用言語を書くのを忘れずに。

正規表現と関係ない話・質問は他スレへどうぞ。

894 名前:nobodyさん mailto:sage [2012/02/23(木) 09:38:55.66 ID:???]
1つの文字種だけでないならどこかに異なる2つの文字種が並ぶところがある筈
なので、あとは4文字以上の条件を満たすにはその並ぶところの前に2文字以上
あるか、前と後ろに1文字以上ずつあるか、後ろに2文字以上あるかのいずれか
である。

文字クラスをいちいち書くのはだるいのであ,ア,a,○で代表させると

[あアa○]{2,}あア[あアa○]*

みたいのを真ん中の文字種の順列×前と後ろの繰り返し数のパターン分だけ
つくって|で並べればOK


895 名前:nobodyさん mailto:sage [2012/02/23(木) 10:34:55.79 ID:???]
>>894
「[あアa○]{2,}あア[あアa○]*」の真ん中の「あア」の部分を
「あア」「あa」「あ○」「アあ」「アa」「ア○」「aあ」「aア」「a○」
「○あ」「○ア」「○a」の12通り作って|で並べると解釈しましたがよろしかったでしょうか。

制作本当にありがとうございました。



896 名前:nobodyさん mailto:sage [2012/02/23(木) 12:00:24.74 ID:???]
さらに前後の繰り返し数の場合わけで

[あアa○]{2,}あア[あアa○]*
[あアa○]{1,}あア[あアa○]{1,}
[あアa○]*あア[あアa○]{2,}


も必要だから12×3=36通り作って並べる


897 名前:nobodyさん mailto:sage [2012/02/23(木) 12:03:30.20 ID:???]
真ん中だけ違うんだから

[あアa○]{2,}(あア|あa|….)[あアa○]*
[あアa○]{1,}(あア|あa|….)[あアa○]{1,}
[あアa○]*(あア|あa|….)[あアa○]{2,}

とした方が楽だな

898 名前:nobodyさん mailto:sage [2012/02/23(木) 14:37:23.71 ID:???]
>>896>>897さま
追加補足ありがとうございます!

899 名前:nobodyさん mailto:sage [2012/02/23(木) 17:00:23.37 ID:???]
PHP:5.3です。
URLの置換の質問です。
(preg_replace()でやるつもり)

ttp://aa.com/index.php?(適当な文字列) 複数あり

ttp://aa.com/index.html
のようにしたいのですが、どのような正規表現を使ったらいいでしょうか?


よろしくお願いします。



900 名前:nobodyさん mailto:sage [2012/02/23(木) 21:26:51.99 ID:???]
>>899
検索対象
index\.php[\?]+.+$
置換文字列
index.html

URLに含まれるphpファイルが複数存在する場合、GET変数(?以降の文字列)を強制的に除去したい場合
ただし、文中のあらゆる「?」から始まる単語が検索対象となってしまう。
検索対象
[\?]+.+$
置換文字列
index.html


901 名前:nobodyさん mailto:sage [2012/02/26(日) 21:16:58.77 ID:???]
javascriptです。
検索文字列が"manga_index[0-9]+\.html"と"manga_ban_index[0-9]+\.html"
(例:manga_index52342.htmlとmanga_ban_index2.htmlでヒット)

manga_index[0-9]+\.htmlの場合はmanga_ban_index[0-9]+\.htmlとban_を追加し
manga_ban_index[0-9]+\.htmlの場合はmanga_ban_index[0-9]+\.htmlとそのままにしたいのですがどうすればいいのでしょうか?

902 名前:nobodyさん mailto:sage [2012/02/27(月) 16:13:34.47 ID:???]
manga_index を manga_ban_index に置換すればいいんじゃないの



903 名前:nobodyさん mailto:sage [2012/02/29(水) 06:23:11.44 ID:???]
使用言語問わず(?:foo|bar)と(foo|bar)の違いが判りません
自分が読むスクリプト言語の参考書では特に注釈もなしにfooかbarかどちらかに当てはまるものは(?:foo|bar)と書かれますが
初心者向けの正規表現についてのサンプルなど見ると(foo|bar)が多い気がします

どういう違いなのでしょう?初歩的な質問ですがよろしくお願いします

904 名前:nobodyさん mailto:sage [2012/02/29(水) 14:42:57.64 ID:???]
>>903
()で囲むとあとから\1などで参照できます。
(?:)とするとその参照を切ることができます。
()でグループ分けをしたいけど参照はしない、というときにその設定をすると無駄がなくなります。

905 名前:nobodyさん mailto:sage [2012/03/01(木) 17:23:10.26 ID:???]
>>904
今までよくわからないで()を使っていたので
これからはもっと良いものが書けそうです、ありがとうございます

906 名前:nobodyさん mailto:sage [2012/03/05(月) 00:36:21.70 ID:???]
phpの正規表現で、特殊文字、こんなの→(?????)を区別したいんですが、どうすればよいでしょうか。
ざっくりした質問ですので、参考になるサイトを教えてくださる程度でも構いません。

907 名前:906 mailto:sage [2012/03/05(月) 00:47:40.35 ID:???]
文字化けしてますね。すみません。
特殊文字というのは、ミリとかリットルとか、特殊顔文字(読み方がわかりません。ハートとか。)で使われるものです。

908 名前:nobodyさん mailto:sage [2012/03/05(月) 01:55:25.02 ID:???]
>>906
UTF-8で

909 名前:nobodyさん mailto:sage [2012/03/05(月) 09:22:56.91 ID:???]
全部並べて文字クラスにすりゃいいだろ。正規表現以前の問題だな。


910 名前:nobodyさん mailto:sage [2012/03/10(土) 02:43:47.72 ID:???]
479 名前:nobodyさん[] 投稿日:2012/03/10(土) 02:34:43.14 ID:/aJUja8G
文字列の正規表現で
「数値と英語と . と / と hoge 以外にマッチ」
というのをやりたいのですがどうも失敗してしまいます。一発での解決方法とかあるのでしょうか?

\Dやったあとまた\Wでマッチング、その後ドットでマッチングと物凄く効率悪い方法しか思いつかなかったのですが


911 名前:nobodyさん mailto:sage [2012/03/10(土) 02:56:04.76 ID:???]
裏を返せば「数値か英語か . か / か hoge にマッチ」 したらnotマッチ

912 名前:nobodyさん mailto:sage [2012/03/10(土) 03:17:32.46 ID:???]
>>911
貼ったの自分じゃないですがありがとうございます!
そういう考え方でいけばいいんですね



913 名前:nobodyさん [2012/03/20(火) 19:40:54.01 ID:Z+BjIxhL]
javaの表現方法で
Bがあれば削除、ただし直前がAなら削除しない、かつB単体でも削除
という表現方法はありますか?
^[A]Bだと全体で2文字あることが前提のように解釈していますが間違っていますでしょうか。

914 名前:nobodyさん mailto:sage [2012/03/20(火) 19:59:11.06 ID:???]
>>913
[^A]?Bかな

915 名前:nobodyさん [2012/03/20(火) 20:10:18.04 ID:Z+BjIxhL]
>>914
マッチしました。ありがとうございます。

916 名前:nobodyさん mailto:sage [2012/03/21(水) 02:09:27.32 ID:???]
[^A]

少し横向きの人が答えてるようで和んだ

917 名前:nobodyさん mailto:sage [2012/03/21(水) 12:29:51.49 ID:???]
ああ、なるほど。と思ったけど ?があるから「はあ?」って言われてるとこ想像してしまい凹んだ

[^A]?

918 名前:nobodyさん mailto:sage [2012/03/26(月) 23:29:49.84 ID:???]
「あいうえお」のいずれかが3回以上連続したらマッチってどうやればいいんでしょう?
[あいうえお]{3,}だと「あいう」とかにもマッチしちゃって駄目だった。

919 名前:nobodyさん mailto:sage [2012/03/26(月) 23:37:31.05 ID:???]
>>918
([あいうえお])\1{2,}

920 名前:nobodyさん mailto:sage [2012/03/26(月) 23:41:15.88 ID:???]
>>919
ありがとうございます!
解決してすっきりしました。

921 名前:nobodyさん mailto:sage [2012/03/28(水) 18:04:07.49 ID:???]
すいません・・・。
>>913->>917の件にて、結果的にどのように表現すればよい結論になったのでしょうか。


922 名前:nobodyさん mailto:sage [2012/03/28(水) 18:26:58.68 ID:???]
>>914だろ



923 名前:nobodyさん mailto:sage [2012/03/28(水) 18:57:52.69 ID:???]
>>921
>>916>>917は顔文字みたいって言ってるだけやんw

924 名前:nobodyさん mailto:sage [2012/03/28(水) 18:59:57.97 ID:???]
>>922>>923
ありがとうございます。
横向きの人、というのが理解できず失礼しました^^;

925 名前:nobodyさん [2012/03/29(木) 12:43:34.53 ID:UbmjoR9L]
元テキスト:
https://www.google.co.jp/search?hl=ja&safe=off&site=&source=hp&q=test&oq=test&aq=f&aqi=g10&aql=&gs_l=hp.3..0l10.1783l3806l0l4057l7l7l0l0l0l0l145l766l2j5l7l0.frgbld.
https://www.google.co.jp/search?q=test&oe=utf-8&rls=org.mozilla:ja:official&hl=ja&client=firefox-a&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=n8BzT-uaHqaimQWZweD8Bw&biw=1064&bih=964&sei=ocBzT4e7FqOimQWq3IH5Bw
https://www.google.co.jp/search?q=test&hl=ja&safe=off&prmd=imvnsz&source=lnms&tbm=nws&ei=18lzT6GLE_HTmAXK8N2CCA&sa=X&oi=mode_link&ct=mode&cd=5&ved=0CBsQ_AUoBA&biw=1064&bih=931
maps.google.co.jp/maps?q=test&oe=utf-8&rls=org.mozilla:ja:official&hl=ja&client=firefox-a&um=1&biw=1064&bih=964&ie=UTF-8&sa=N&tab=il

C#:
using System.Text.RegularExpressions;
text = Regex.Replace(text, @"(https?://[a-z.]+\.google\.[a-z.]+/[a-z]+\?).*?(q=[^&]*).*?(&tbm=[^&]*)?[a-zA-Z0-9-_./~*%$@:;,!?&=+#]*", "$1$2$3");

GoogleのURLをシンプル化したいのですが、上記コードだと「(&tbm=[^&]*)?」の部分が拾えません。
最後の?を取ると&tbmを含まないクエリでマッチしなくなります。
どうしたらいいでしょうか。

926 名前:925 [2012/03/29(木) 19:25:30.17 ID:UbmjoR9L]
>>925の問題を解決しつつ、少し進展しました。

text:
https://www.google.co.jp/search?hl=ja&safe=off&site=&source=hp&q=test&oq=test&aq=f&aqi=g10&aql=&gs_l=hp.3..0l10.1783l3806l0l4057l7l7l0l0l0l0l145l766l2j5l7l0.frgbld.
https://www.google.co.jp/search?q=test&oe=utf-8&rls=org.mozilla:ja:official&hl=ja&client=firefox-a&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi&ei=n8BzT-uaHqaimQWZweD8Bw&biw=1064&bih=964&sei=ocBzT4e7FqOimQWq3IH5Bw
https://www.google.co.jp/search?tbm=isch&hl=ja&source=hp&biw=1064&bih=931&q=test&gbv=2&oq=test&aq=f&aqi=g9g-r1&aql=&gs_l=img.3..0l9j0i4.2370l3015l0l3824l4l4l0l0l0l0l111l406l2j2l4l0.frgbld.
https://www.google.co.jp/search?q=test&hl=ja&safe=off&prmd=imvnsz&source=lnms&tbm=nws&ei=18lzT6GLE_HTmAXK8N2CCA&sa=X&oi=mode_link&ct=mode&cd=5&ved=0CBsQ_AUoBA&biw=1064&bih=931
maps.google.co.jp/maps?q=test&oe=utf-8&rls=org.mozilla:ja:official&hl=ja&client=firefox-a&um=1&biw=1064&bih=964&ie=UTF-8&sa=N&tab=il

C#:
text = Regex.Replace(text, @"(https?://[a-z.]+\.google\.[a-z.]+/[a-z]+)(?=.*[?&](q=[^&\s]*))(?=.*[?&](tbm=[^&\s]*))?[a-zA-Z0-9-_./~*%$@:;,!?&=+#]*", "$1?$2&$3");

やりたいこと:
googleのURLのうち、「q=」と「tbm=」の2種類の変数だけ取り出して残りを削ぎ落とす。
ただし、q/tbmの登場は順不同にも対応する。

困っていること:
「tbm=」がないURLでも、置換の第3引数に「&$3」を付けているために「&」だけ付いてしまう。
三項演算子で ("$3"=="")?"":"&$3" とかやろうとしたけど最初の"$3"を展開してくれないようで挫折。
1行追加して、「最後に&だけが付いてたら取り除く」しかないでしょうか。

927 名前:nobodyさん mailto:sage [2012/03/29(木) 20:25:45.43 ID:???]
なんか大変そうだなぁ。
俺なら?で分割して、2個になったら2個目を&で分割して、q=とtbm=を取り出して終わるわ

928 名前:nobodyさん mailto:sage [2012/03/30(金) 00:45:36.69 ID:???]
素直にライブラリ使った方が。
see HttpUtility.ParseQueryString()

929 名前:925 [2012/03/30(金) 13:55:15.20 ID:Wpf4JXLP]
>>927-928の言うとおりという気もしてきましたが、どうやら上手くいったのでご報告します。

C#:
text = Regex.Replace(text, @"(https?://[a-z.]+\.google\.[a-z.]+/[a-z]+)(?(?=\?tbm=)(\?(tbm=[^&\s]*).*?(&q=[^&\s]*))|((?=.*?[?&](q=[^&\s]*))(?=.*?(&tbm=[^&\s]*))?))[a-zA-Z0-9-_./~*%$@:;,!?&=+#]*", "$1?$2$3$5$6");

キャプチャ結果ではなく正規表現のほうに条件式を入れてどうにかできました。
ただし条件が複雑になると書き方がどんどん煩雑になるので拡張性はないかもしれません。

あと、どうも条件式をくくった部分で$4と$7をキャプチャ(両方とも常に空)しているようですが、
そこに(?:を足すと入れ子のカッコ内が全部キャプチャされなくなってしまったので、とりあえずこのまま。

930 名前:nobodyさん mailto:sage [2012/03/30(金) 17:40:03.01 ID:???]
正規表現でがんばらなければだめな理由があるに違いないとそっと放置されるコード片が今まさに生まれたのである。

931 名前:nobodyさん [2012/04/12(木) 15:38:18.00 ID:nr7fN3uJ]
個人の小さいメールマガジンスタンドをやっているのですが
秀丸エディタの正規表現を利用して帰ってきたエラーメールリストから
アドレスだけを抜き出したいのですがどうすればいいでしょうか?

具体的には
---------------------------
メールヘッダー

<abcdefghijklmno@ezweb.ne.jp>
---------------------------
というテキストがあって
<abcdefghijklmno@ezweb.ne.jp>の部分の
abcdefghijklmno@ezweb.ne.jpのみを取り出したいと思っています

よろしくお願い致します

932 名前:nobodyさん mailto:sage [2012/04/13(金) 14:15:11.85 ID:???]
anago.2ch.net/test/read.cgi/software/1331567709/162-164



933 名前:nobodyさん mailto:sage [2012/04/16(月) 12:27:42.62 ID:???]
>>931
秀丸の正規表現スタイル判らないけど、
エディタの検索欄で特定の場所だけ抜き出すって結構大変だよ。
いっそ、perl、php、javascriptで書いた方が良いと思う

934 名前:ゼッケン774さん@ラストコール [2012/05/09(水) 21:57:54.68 ID:BzXqVbz5]
不明

935 名前:nobodyさん [2012/05/10(木) 11:31:59.11 ID:uA0oypVx]
質問です。javaを使用しています。
(?:[\((][一-龠]+[\))]*)
という正規表現をした際、括弧内にひらがなが含まれてしまうのですが、
含まれない漢字のみ括弧内に存在する表現方法を教えていただけないでしょうか。
お願いします。


936 名前:nobodyさん mailto:sage [2012/05/12(土) 18:10:34.44 ID:???]
[\((](?!.*[ぁ-んァ-ヶヲ-゚0-9a-zA-Za-zA-Z0-9])はどうだろう。
しかし、「(笑)www」とかだめだよなあ。

937 名前:nobodyさん mailto:sage [2012/05/13(日) 01:45:46.19 ID:???]
誘導されて来たんですけど、
こんなスレあったのね。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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