正規表現道場at PHP
正規表現道場 - 暇つぶし2ch917:nobodyさん
12/03/21 12:29:51.49
ああ、なるほど。と思ったけど ?があるから「はあ?」って言われてるとこ想像してしまい凹んだ

[^A]?

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

919:nobodyさん
12/03/26 23:37:31.05
>>918
([あいうえお])\1{2,}

920:nobodyさん
12/03/26 23:41:15.88
>>919
ありがとうございます!
解決してすっきりしました。

921:nobodyさん
12/03/28 18:04:07.49
すいません・・・。
>>913->>917の件にて、結果的にどのように表現すればよい結論になったのでしょうか。


922:nobodyさん
12/03/28 18:26:58.68
>>914だろ

923:nobodyさん
12/03/28 18:57:52.69
>>921
>>916>>917は顔文字みたいって言ってるだけやんw

924:nobodyさん
12/03/28 18:59:57.97
>>922>>923
ありがとうございます。
横向きの人、というのが理解できず失礼しました^^;

925:nobodyさん
12/03/29 12:43:34.53 UbmjoR9L
元テキスト:
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)
URLリンク(maps.google.co.jp)

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
12/03/29 19:25:30.17 UbmjoR9L
>>925の問題を解決しつつ、少し進展しました。

text:
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)
URLリンク(maps.google.co.jp)

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さん
12/03/29 20:25:45.43
なんか大変そうだなぁ。
俺なら?で分割して、2個になったら2個目を&で分割して、q=とtbm=を取り出して終わるわ

928:nobodyさん
12/03/30 00:45:36.69
素直にライブラリ使った方が。
see HttpUtility.ParseQueryString()

929:925
12/03/30 13:55:15.20 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さん
12/03/30 17:40:03.01
正規表現でがんばらなければだめな理由があるに違いないとそっと放置されるコード片が今まさに生まれたのである。

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

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

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

よろしくお願い致します

932:nobodyさん
12/04/13 14:15:11.85
スレリンク(software板:162-164番)

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

934:ゼッケン774さん@ラストコール
12/05/09 21:57:54.68 BzXqVbz5
不明

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


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

937:nobodyさん
12/05/13 01:45:46.19
誘導されて来たんですけど、
こんなスレあったのね。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch