正規表現道場at PHP
正規表現道場 - 暇つぶし2ch809:nobodyさん
11/10/14 15:26:32.18 i4T0D1ix
>>807
↓だと「Hello」ごと消えていかないか?
<p>Hello</p>
↓だと「…alt="」で止まってしまわないか?
<img src="hello.png" alt="こんにちは">

↓というわけでこれでいいんじゃないの。
<[^>]>

810:nobodyさん
11/10/14 15:28:56.11 i4T0D1ix
失礼「+」が抜けてた
<[^>]+>

811:nobodyさん
11/10/15 02:18:16.86 pl58b8lQ
フジテレビデモ
花王デモ
要チェック


812:nobodyさん
11/10/15 15:28:36.48
>>809
これは便利。ありがとう

813:nobodyさん
11/10/15 16:07:18.81
いいってことよ

814:809
11/10/15 18:11:07.01 5td5CFAR
>>813www

815:nobodyさん
11/11/01 16:59:25.75
行単位をダブルクオートで囲む正規表現で

ああああ文字列ああああ
いいいい文字列いいいい

検索
/^.*$/m

置き換え
"$0"

とした場合に
"ああああ文字列ああああ
"
"いいいい文字列いいいい
"

となってしまいます。"ああああ文字列ああああ"としたいのですが、どのようにすれば良いでしょうか
PHPのpreg_replaceを使っています。よろしくお願いします。

816:nobodyさん
11/11/01 17:49:42.69
マッチするないように改行が含まれてるから。

817:nobodyさん
11/11/01 18:23:24.87
>>815
自己レス
\x0Dが原因でした。

818:nobodyさん
11/11/01 22:17:43.68
>>817
>>816を無視するのか

819:nobodyさん
11/11/01 22:40:47.00
>>818

>>816
> マッチするないように改行が含まれてるから。

ではなくて
マッチするないように改行が含まれていなくても\x0Dが付加されるから

無視ではありません。

820:816 != 818
11/11/01 23:45:06.62
>>819
言い方が悪かったのかな。CRが含まれてるから。
別にCRは付加されたりしないよ。

preg_replace("/^([^\r]*)\r?$/m", "\\1", $text);
とするか、LFのみに変換してから処理するか。

821:nobodyさん
11/11/07 22:53:15.08
住所と番地の間にある空白を削除する場合どうやればいいですか?
「見附市 見附 123番地」この文字列を
「見附市 見附123番地」としたいです
「見附市」と「見附」の間の空白はそのままという条件付です

822:nobodyさん
11/11/08 00:28:51.98
数字が必ずある前提で、
\s[\d]

823:nobodyさん
11/11/08 01:11:57.96
(?!市).\s

824:nobodyさん
11/11/08 08:57:43.48
>>823
町や村にもヒットさせろよw
群はいらないか

825:nobodyさん
11/11/08 10:58:00.13
(東京都|北海道|(?:京都|大阪)府|[県市区群])\s+

\1

826:nobodyさん
11/11/08 10:58:59.04
ああ、勘違いした
>>825は流してくれ

827:nobodyさん
11/11/08 12:21:27.42
>>821
(?![市区町村]).\s

828:816 != 818
11/11/08 13:46:47.91
郡、な。

829:nobodyさん
11/11/08 20:01:17.27
しゅくちょく

830:nobodyさん
11/11/09 02:32:34.16
>>827
空白にマッチしたいんだから↓の間違いだよね。
(?<![市区町村])\s+


831:nobodyさん
11/11/23 06:53:59.84 V5f5mApl
![[
 文字列
 ![[別の文字]]
 ![[ほげほげ]]
]]

![[何か]]←これが1単位で、↑こんなの中から最短マッチで抽出したく、以下のようにしました。

$pattern = '/!\[\[([^\[\]]+)\]{2,2}?/';

しかしこの場合、ブラケットが使えないので困っています。

![[ この中に[←とか]←があると使えない ]]

最短マッチさせるにはどう書けばいいでしょうか?

832:nobodyさん
11/11/23 07:02:11.30
$pattern = '/!\[\[.+?]]{2,2}?/';


833:nobodyさん
11/11/23 09:23:16.47 V5f5mApl
>>832
ありがとうございます。
ちなみに↓こうでしょうか?
$pattern = '/!\[\[.+?\]{2,2}?/';

しかしながら、やはり最長マッチになってしまいます。
うっかり書き忘れたのですが、PHPのpreg_matchで行なっています。
PCRE準拠(Prel互換)らしいです。

834:nobodyさん
11/11/23 09:52:54.59 V5f5mApl
あ、すみません、できました!
が、1行だといけるのですが、複数行にまたがった場合失敗しました。
↓このような場合

![[
 文[字]列
 ![[別の文字]]
 ![[ほげほげ]]
]]

オプションにmやsを付けてみましたがダメです。

835:nobodyさん
11/11/24 01:59:39.52
>>834
入れ子の対応とりつつマッチするには
Subroutine Referencesを使えば良いよ。

<?php
$re = '/(?:!\[\[(?:(?!!\[\[)(?!\]\]).|(?R))*\]\])/s';
$text = "![[
  文[字]列
  ![[別の文字]]
  ![[ほげほげ]]
]]";
$position = array();
for ($i = 0; $i < strlen($text); $i++) {
  $pos = strpos($text, '!', $i);
  if (end($position) !== $pos)
    $position[] = $pos;
}
foreach ($position as $pos) {
  $t = substr($text, $pos);
  if (($pos === 0 || $pos) && preg_match_all($re, $t, $match, PREG_SET_ORDER)) {
    var_dump($pos); var_dump($t); var_dump($match); print "----\n";
  }
}
?>


836:nobodyさん
11/11/25 00:51:55.86 7pZprZ8q
>>835
うぉ!?ありがとうございます!

837:nobodyさん
11/11/25 01:08:56.26
>>835
おーこれでいけそうです!
なるほど、こんなやり方がありましたか。とても勉強になりました!


838:nobodyさん
11/11/27 21:48:09.61 ZbhJICcu
jsonの形式を配列に変換することは出来ないでしょうか?
phpのjson_decodeだと、どうやら変換エラーが出るようで、正規表現で解決できればと思うのですが。
{"xType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"xNum":{"0":"6","1":"6","2":"5","3":"5","4":"6"},"yType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"yNum":{"0":"5","1":"4","2":"4","3":"5","4":"5"}}
を[xType][0]=main,[xType][1]=main・・・・・的な感じなんですが。

どなたかお願いいたします。

839:nobodyさん
11/11/27 23:58:55.08
>>838
json_decodeでエラーが出ないんだけど

840:nobodyさん
11/11/28 08:12:12.66 NxvSoLFs
>>839
全体はもっと長いのですが...

841:nobodyさん
11/11/28 11:38:12.26
つーかエラーになるようなjsonモドキを吐く方をなんとかしろよ。

842:nobodyさん
11/11/28 11:51:50.21
>>840
なぜエラーの原因を特定しないのですか...

843:nobodyさん
11/11/28 11:52:31.97
あと、json形式でないものを、json形式だと思い込んで正規表現書いても結局うまくいかないとおもう。

844:nobodyさん
11/11/28 20:38:17.18 cgQZB7ih
{"1":{"0":{"n":{"xType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"xNum":{"0":"3","1":"5","2":"5","3":"3","4":"3"},"yType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},
"yNum":{"0":"5","1":"5","2":"3","3":"3","4":"5"}}},"1":{"b":{"xType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"xNum":{"0":"5","1":"6","2":"6","3":"5","4":"5"},"yType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},
"yNum":{"0":"5","1":"5","2":"4","3":"4","4":"5"}}},"2":{"l":{"xType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},"xNum":{"0":"4","1":"5","2":"5","3":"4","4":"4"},"yType":{"0":"main","1":"main","2":"main","3":"main","4":"main"},
"yNum":{"0":"5","1":"5","2":"4","3":"4","4":"5"}}}}}
一応こんな感じのデータです。
json形式だと思うんですが、phpのほうでは

Syntax error, malformed JSON
とつれない回答です。

845:nobodyさん
11/11/28 21:06:49.29
>>844
デコードできたよ(PHP 5.3.2)

846:nobodyさん
11/11/28 21:16:33.29 cgQZB7ih
マジっすか??
デコードの仕方が悪いのでしょうか??
できればやり方を教えてください。

847:nobodyさん
11/11/28 22:13:12.05
こうならないためにもどんなデータをどうやったらエラーになったかを書くのが重要なんだけど。

848:nobodyさん
11/11/28 22:14:25.01
連レスすまんが、>>838をデコードするのとやり方は変えてないよ。
>>838はデコードできるんだろうから、環境面かもしれないよ

849:846
11/11/28 22:41:14.25 NxvSoLFs
単純にjavascriptの配列をjsonに変換させてからhidden属性に入力。
それをPOSTで送ったPHPファイルで
json_decode($_POST['hidden'])
って形でやってます。hiddenで送ること自体が間違い??
それともhiddenを何かに変換しなければいけないの??

850:nobodyさん
11/11/28 23:04:04.57
hidden属性とか$_POST['hidden']とか胡散臭そうなのが混ざってるし。
問題の切り分けの仕方について続けたいなら、くだ質とか、超初心者スレみたいなところでどうぞ

851:nobodyさん
11/11/29 23:04:45.51 gKGxmzY9
838は出来たけど、844は出来なかった。
同一ファイル上で変数を入れてみた結果として。

852:nobodyさん
12/01/01 16:05:26.90 vpch3S2x
整数の桁数上限なし、小数点以下2位までの少数をマッチさせたいのですがうまくいきません。

str.match(/[0-9]*.[0-9][1-9]/g)

どこが間違っているのか教えていただけますでしょうか。
PHP Version 5.2.16です

宜しくお願い致します。

853:nobodyさん
12/01/01 17:00:46.35
それはJavaScriptにしか見えないけど

854:nobodyさん
12/01/01 18:04:13.68 Zget/7Sh
>>852
本当にPHPだとすれば、あってるところのほうが少ない件
preg_match_all('/[0-9]*\.[0-9][0-9]/');

1/100の位は積極的にゼロを省かなきゃならないの?[0-9]でよくね?
あと、単なる整数とか、小数点以下3位以上の数字をどう扱いたいのかによっても変わってくる。
そもそも実際のところは「PHPで出力するHTMLに書かれたJavaScript」あたりかな?

855: 【大吉】 【1107円】
12/01/01 19:46:02.61
>>852
マッチさせる文字列が数値のみであれば、
数値判定をした方がいいのでは?

文字であっても強制的に数値に変換する等が可能であれば、
かなり楽です。

856:852
12/01/01 23:42:04.11
>853,854,855
大変失礼しました。
854さんのおっしゃる通り、「PHPで出力するHTMLに書かれたJavaScript」でした。

その理解すら不十分でした。申し訳ございませんでした。

857:nobodyさん
12/01/02 17:24:24.78
>>852
// 1 of 2
// 例として円周率pi
var value = "3.1415926";
var target = value;
// 小数部が無ければ、追加する
if (target.indexOf(".") < 0) {
 target = target.concat(".00");
}
var integral_part_1 = 0;
if (target > 0){
 integral_part_1 = Math.floor(target);
}else{
 integral_part_1 = Math.ceil(target);
}
//document.write(value," の整数部は ", integral_part_1, "<br>");


858:nobodyさん
12/01/02 17:25:16.42
>>852
// 2 of 2
// 小数第1位を取得
target = target - integral_part_1;
target = target * 10;
var integral_part_2 = 0;
if (target > 0){
 integral_part_2 = Math.floor(target);
}else{
 integral_part_2 = Math.ceil(target);
}
//document.write(value," の小数第1位部分は ", integral_part_2, "<br>");
// 小数第2位を取得
target = target - integral_part_2;
target = target * 10;
var integral_part_3 = 0;
if (target > 0){
 integral_part_3 = Math.floor(target);
}else{
 integral_part_3 = Math.ceil(target);
}
document.write(value," の小数第2位部分は ", integral_part_3, "<br>");


859:nobodyさん
12/01/06 21:48:56.02 b1y0AA6H
ここの皆さんのレベルでは簡単すぎるのかもわかりませんが教えてください
Firefoxブラウザのスクリプトで「Google Reader NG Filter」というものがあります
これはRSS文中に特定のキーワードが一致していれば自動的に削除するものです
サンプルとしてADとPRを消す正規表現がはじめから入っています
^\W?(?:ADV?|PR)\b
こういうものです
先頭にADやPRがあれば広告を見なくてもすむわけです

これを応用して見たくないキーワードが含まれているものを消すべく
自分なりに試行錯誤しているのですが上手くいきません
文中のキーワードなので当然^は不要ですし、正規表現のサイトで勉強して改変しても
動かないのです
iPhoneとAndroidというキーワードが含まれていたら削除するという表現をお願いします

860:nobodyさん
12/01/06 23:01:27.07 pwr91DzE
(?:iPhone|Android)でいいだろ。
上記にマッチした上で、本文を削除する部分もサンプルからコピペしないとダメだぞ。

861:nobodyさん
12/01/06 23:25:15.04
.*(iPhone|Android).*

862:nobodyさん
12/01/06 23:26:11.05
>>860
それやったけど、ダメでした…
普通はこれにしますよね

863:nobodyさん
12/01/07 00:03:18.47 n5aAiFGN
>>862
いや少なくとも>>860の正規表現はマッチするはずなので、たとえば
1. マッチさせる対象が本文ではなくタイトルになっている
2. 削除する処理がどうにかなっている
3. その他

864:nobodyさん
12/01/07 00:05:14.52
>>859
これか
URLリンク(userscripts.org)
親ルール,URL,他の条件にマッチしてないんじゃないか?
あと、大文字小文字をチェックしているとか

865:nobodyさん
12/01/07 00:56:55.41
>ここの皆さんのレベルでは簡単すぎるのかもわかりませんが教えてください
こんな枕詞はいらん。

866:nobodyさん
12/01/13 15:32:24.50 QW0sWV6a
<a href="URLリンク(example.com)"><img src="URLリンク(examle.com)"></a>

これで<a hrefがない場合に限り<img srcにマッチさせてURIを取得するにはどうすればいい?

preg_match_all('/(?:(?(?=<a href)|src))="([^"]+)/si', $html, $m);
だと<a hrefがあるときは<a hrefの部分は何もマッチしなくてsrcの方がマッチするみたい

867:nobodyさん
12/01/13 21:09:54.88
まず<a hrefがないというのが何処にないのか、土台をはっきりさせないと

868:nobodyさん
12/01/14 00:24:14.06
>>866
preg_match_all('|<img src="([^"]*)">(?!</a>)|')

869:nobodyさん
12/01/15 00:11:37.39
>>866
xhtmlが想定できるなら、正規表現よりxpath使った方が良いよ。
php.netにある例を改変すれば、$stringに文書が文字列化されてるとして、

$xml = new SimpleXMLElement($string);
$result = $xml->xpath('//img[name(..)!="a"]/@src');
while(list( , $node) = each($result)) {
    echo $node,"\n";
}

この場合だと親要素がaではないimg要素のsrc属性ってことが
直接表現できるからね。


870:nobodyさん
12/02/04 12:29:11.76
こちらのスレッドにはじめて投降します。よろしくお願いします。
・使用言語:java
・質問内容:漢字を余すことなく拾いたい。
※漢字を拾い出す正規表現をネットで調べていたのですが、
なにが新しくて、なにが不十分で、なにが正解なのかわからなくなってしまいました。




871:nobodyさん
12/02/04 18:34:56.81
漢字以外

872:nobodyさん
12/02/04 20:48:16.26
[\p{InCJKUnifiedIdeographs}
こういうのをみつけたのですが、これで網羅されているのでしょうか。

873:nobodyさん
12/02/05 12:00:52.66
URLリンク(code.cside.com)
ここらを見て漢字の含まれているグループを加えたらいいんじゃないかしら。拾っては困る文字があるなら
拾いたい漢字のコードポイントを列挙するしかないんじゃないかしら

「ああもう面倒 ! Unicodeに含まれる日本語で使われている漢字だけを拾う正規表現をここに書いてくんろ !」って
ことなら答えてもらえないと思うぞw

874:nobodyさん
12/02/05 13:17:26.57
>>873
面倒。。。という意味ではなく、漢字を含む文章を取り上げる正規表現を探していたのですが、
調べれば調べるほど種類があり、何を明記すれば過不足なく満足な結果を得られるのか分からなくなったので
質問した次第です。


875:nobodyさん
12/02/05 13:35:14.15
>>870
JIS X 0208またはJIS X 0213準拠の漢字コードでいいんじゃない?
JIS X 0208準拠なら URLリンク(charset.7jp.net) にあったよ。

876:nobodyさん
12/02/05 17:49:14.26
>>875
ありがとうございます。[亜-腕弌-熙]に加えて[纊-黑]もあるようですが、
\p{InCJKUnifiedIdeographs} または[一-龠]とは比べて量が異なるのか否か
使ってはいけないのかどうなのか、教えていただけると嬉しいです。

ちなみにwindows7、Microsoft(R) Office IME 2007 辞書ツール を使っています。

877:nobodyさん
12/02/05 19:33:01.78
>>876
コード表から検索すればすぐわかると思うんだけど…。
"一" で検索すれば 4e00 にあり、"龠" で検索すれば 9fa0 にあることがわかる。
\p{InCJKUnifiedIdeographs} は実装に依存するからJavaの仕様書を読んで、としか。
使ってはいけない、なんて判断指標もなしに判断できるわけがない。

878:nobodyさん
12/02/05 19:41:04.69
"JavaTM Platform Standard Ed. 6" には \p{InCJKUnifiedIdeographs} がないね。
URLリンク(java.sun.com)

879:nobodyさん
12/02/05 20:32:59.67
>>877>>878
返答、誠にありがとうございました。
自分の出した結論としては、\p{InCJKUnifiedIdeographs}がクラス Patternにはないこと、
亜は4E9C、黑は9ED1にあり、一と龠の位置よりも狭いことから(並びの順序が違うので一概には言えませんが)、
[一-龠]を使うのが一番妥当と判断しました。

皆様、本当にありがとうございました。


880:nobodyさん
12/02/17 21:31:06.69
質問です。ABCDEと5つの文字があり、複数の文中・文末に点在しています。

文中・文末にあるABCDEをマッチさせる正規表現を教えてください。
文頭はのぞきたいです。
ネットで調べたりしたのですが、どの言葉を用いると自分の要求する答えが
見つかるのか分からなかったので書き込みしました。
また自分で調べるためにも自己解決できるようなHPを教えていただけると嬉しいです。

よろしくお願いします。
JAVAを用いています。

881:nobodyさん
12/02/18 01:29:01.30
>>880
文頭は ^ か \n
マルチラインモードで動作しているかによって変わる

882:nobodyさん
12/02/18 07:45:28.55
>>881
マルチラインモードONだと思います。
それぞれの文章ごとに適用したいと思っています。

追記なのですが、
ABCDEが含まれていない文章も除きたいと考えています。
よろしくお願いします。

883:nobodyさん
12/02/18 10:11:57.59
>>882
もう答えは出ていると思うんだが…。
否定先読みと ^ を組み合わせればいい。
URLは>>878

884:nobodyさん
12/02/18 10:58:37.64
>>883
ありがとうございました。

885:nobodyさん
12/02/22 10:20:21.24
質問です。javaをしようしています。
ひらがな・カタカナ・アルファベット・記号で、連続ではない必ずまじりあった4文字以上の文章
を抜き出す正規表現を教えて頂けないでしょうか。よろしくお願いします。

886:nobodyさん
12/02/22 22:58:11.24
連続ではないまじりあった状態がどういうことなんだろう。
その4種を用いていればまじりあいそうな。
あアs# はどうなの。

887:nobodyさん
12/02/22 23:26:26.77
>>886
連続ではない必ず混じりあった4文字以上の文章とは
「ああああ」「アアアア」「aaaa」「◎◎◎◎」等連続した文章ではなく
「あアアa」とか「aaaの」とか「◎あアア」等の文章のことです。

分かりづらくすいません。


888:nobodyさん
12/02/22 23:50:16.43
>>887
それだけじゃ分かりにくい
例えば「アあアa」はどうなんの?

889:nobodyさん
12/02/22 23:59:54.01
>>888
「ひらがなだけ」「カタカナだけ」「アルファベットだけ」「記号だけ」の文章ではないのでマッチします。
「あいうえお」はひらがなが連続しているのでマッチしないようにお願いします。

890:nobodyさん
12/02/23 00:39:32.26
>>889
こんな感じ?

^(?:[a-zA-Zぁ-ゞァ-ヾ、-◯].{4,}|[a-zA-Zぁ-ゞァ-ヾ].{4,}|[a-zA-Zぁ-ゞ].{4,}|[ぁ-ゞァ-ヾ、-◯].{4,}|[ぁ-ゞァ-ヾ].{4,}|[ァ-ヾ、-◯].{4,})$

891:nobodyさん
12/02/23 00:45:45.26
>>890
表現していただき、本当にありがとうございました。
さっそく活用したいと思います。感謝します。

892:nobodyさん
12/02/23 01:57:09.70
>>891
ごめん890は流してくれ
なんか頓珍漢なこと書いてたわ

893:nobodyさん
12/02/23 02:20:18.23
>>892
いえいえ、謝られることなんて。

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

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

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

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


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

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



896:nobodyさん
12/02/23 12:00:24.74
さらに前後の繰り返し数の場合わけで

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


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


897:nobodyさん
12/02/23 12:03:30.20
真ん中だけ違うんだから

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

とした方が楽だな

898:nobodyさん
12/02/23 14:37:23.71
>>896>>897さま
追加補足ありがとうございます!

899:nobodyさん
12/02/23 17:00:23.37
PHP:5.3です。
URLの置換の質問です。
(preg_replace()でやるつもり)

URLリンク(aa.com)(適当な文字列) 複数あり

URLリンク(aa.com)
のようにしたいのですが、どのような正規表現を使ったらいいでしょうか?


よろしくお願いします。



900:nobodyさん
12/02/23 21:26:51.99
>>899
検索対象
index\.php[\?]+.+$
置換文字列
index.html

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


901:nobodyさん
12/02/26 21:16:58.77
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さん
12/02/27 16:13:34.47
manga_index を manga_ban_index に置換すればいいんじゃないの

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

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

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

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

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

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

908:nobodyさん
12/03/05 01:55:25.02
>>906
UTF-8で

909:nobodyさん
12/03/05 09:22:56.91
全部並べて文字クラスにすりゃいいだろ。正規表現以前の問題だな。


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

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


911:nobodyさん
12/03/10 02:56:04.76
裏を返せば「数値か英語か . か / か hoge にマッチ」 したらnotマッチ

912:nobodyさん
12/03/10 03:17:32.46
>>911
貼ったの自分じゃないですがありがとうございます!
そういう考え方でいけばいいんですね

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

914:nobodyさん
12/03/20 19:59:11.06
>>913
[^A]?Bかな

915:nobodyさん
12/03/20 20:10:18.04 Z+BjIxhL
>>914
マッチしました。ありがとうございます。

916:nobodyさん
12/03/21 02:09:27.32
[^A]

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

917: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