犬猫子供を出せば、馬鹿は見るだろ? 某テレビ局在日社員
スルーされにくい質問のテンプレと例 ●正規表現の使用環境 Java1.5 ●検索か置換か? 検索 ●説明 各行の1番目のAまでを検索したい ●対象データ ABCA BCAA CABA ●希望する結果 ABCA ^ BCAA ^^^ CABA ^^
^.*?A
ただの5に対する解答例なんじゃないの
つか ●希望する結果 ABCA ^ BCAA ^^^ CABA ^^ これわかりにくいだろ アンダーラインのつもりだったのかよ
アンダーラインのつもりであることはわかるだろ。
^^;
12 :
851 :2011/12/11(日) 23:27:56.52
>>939 perlのオプションが2種類あることを知らないで適当書いてしまいました、申し訳ない..
>>998 ご指摘ありがとうございました
13 :
デフォルトの名無しさん :2011/12/12(月) 16:43:32.38
preg_match関数
http://jp2.php.net/manual/ja/function.preg-match.php >flags には以下のフラグを指定できます。
>PREG_OFFSET_CAPTURE
>このフラグを設定した場合、各マッチに対応する文字列のオフセットも返されます。 これにより matches の値は配列となり、 配列の要素 0 はマッチした文字列、 要素 1は対象文字列中におけるマッチした文字列のオフセット値 となることに注意してください。
PHPの話です。
この、PREG_OFFSET_CAPTUREという機能がすごく有り難いのですが、、
この機能は、preg_match関数だけにしかないのでしょうか?
PHPで他にもこの機能を持った関数はあるのでしょうか?
マルチバイトの関数でこの機能があれば有り難いのですが、なんかないですよね?
ググれ
15 :
デフォルトの名無しさん :2011/12/14(水) 02:34:01.67
性器表現
>>13 このスレに常駐してる奴にそんなこと分かるわけないだろ。
PHPはmb系列は鬼車なんだね。PCREしか使わないから知らなかった。
日本語で書かれたサイトはないの?
なるほど、pcreの再帰は使い勝手悪いけど鬼車の再帰は使い易い。確かに鬼車なら簡単に書けますね。 括弧の数を数えるコードを書くほうが効率悪いかも。
以下の正規表現でよろしいでしょうか? ご意見を頂ければ幸いです。 /(-1)|^[\d]+/ ●正規表現の使用環境 PHP Version 5.1.6 ●検索か置換か? 検索 ●説明 金額の数値チェックですが、 負の数である-1のみ入力を許可します。 0は許可します。 -1, 0, 1, 2, ..., 10, ..., 100, ●対象データ 数値(金額) ●希望する結果 × -10 … × -2 ○ -1 ○ 0 … ○ 10 ○ 11
>>23 \A(?:-1|0|[1-9]\d*)\z
○0
×00
×000
>>23 数値をなぜわざわざ正規表現でチェックするの?
>>25 その方がif文より速い、と思い込んでるんだろうね
あー、そうか、単純にif文で文字列比較すればいいのか…
28 :
デフォルトの名無しさん :2011/12/17(土) 03:08:04.31
\sとホワイトスペースとされている[ \n\r\t\v\f]を比べたら違っていた。 \sには\vが含まれてない。 ホワイトスペースは明示的に指定した方が良いな。
30 :
29 :2011/12/17(土) 03:30:16.80
>>29 はPHPの最新版。
実際には\vが出てくる機会は無いんだろうけど。
万が一使われて不具合でる場合に、速度犠牲にしても明示的な指定が良いことはある。
31 :
デフォルトの名無しさん :2011/12/17(土) 03:38:09.84
要件でのチェック処理はjavascriptでした。 改修前のソースが正規表現で書かれていたので、そこに固執していました。 ありがとうございます。 var num; // 画面からの入力 if ( num >= -1) { // 入力値OK } else { // 入力値NG }
文字が入力されたらどうするんだよ。
1,000,000の点は考えなくていいのかな?
桁区切りのカンマ、小数点は入力時にエラーとして再入力を促します。
それなら楽勝だね、お疲れ。
それは外部者が言うことじゃない。
●正規表現の使用環境 c# ●検索か置換か? 検索 ●説明 一番長い数字の連続を検索したいです ●対象データ hogehoge120_hoge001218hoge1 ●希望する結果 001218
\d+で数字列検索してプログラム使って最長判定 正規表現だけじゃ無理
string s = "hogehoge120_hoge001218hoge1"; string max = ""; foreach (Match m in Regex.Matches(s, "\\d+")) if (m.Value.Length > max.Length) max = m.Value; Console.WriteLine(max);
人に利用される馬鹿が教えてくれるスレ
すみません。正規表現の ^\sd{4}$ とはどういう意味を表しているのでしょうか?
行頭があって空白文字があってdが4つあって行末
>>47 ありがとうございます。
ということは
[ 1234]
のような値でしょうか?
なぜd だけ そのままなのww
>>48 0-9のどれか1文字なら d じゃなくて \d
テンプレのリンクから一番やさしそうなの見つけて読んで
>>50 ありがとうございます。
ということは
[ dddd]
なんですね。ということはこれはバグのような・・
ばっかじゃないの。
試してみました。[ dddd]がhitしてしまいました。 Dim oReg Set oReg = New RegExp oReg.IgnoreCase = False oReg.Pattern = "^\sd{4}$" If oReg.Test(" dddd") Then msgbox "hit!" Else msgbox "ng" End If
頭がバグってきた
試すだけなら print "hit!" if (" dddd" =~ /^\sd{4}$/); で十分。 べーしっくは大変ですなw
すぽぽーん!!
マッチって言おうぜ、ヒットって野球かよ。
トシちゃんでも何でもいいよ
こんばんわ、膝方 歳三です。 呼んだ?
ナウなヤングが多いスレですね
ヒットじゃなくて三振だな
鬼車使用 0001233C,ソレ・ナンテ・エロゲ<TAB>0001233C,Sore nante eroge 000123DD,買ってこい<TAB>000123DD,iyadesu 000123DD,なんだコノ・モノズキ<TAB>000123DD,Daisuki <TAB>は実際にはタブに置き換え こんな感じのタブと,で区切られたテキストがあるのですが //ここから 0001233C,ソレ・ナンテ・エロゲ<TAB>0001233C,Sore nante eroge ,ソレ ,ナンテ ,エロゲ 000123DD,買ってこい<TAB>000123DD,iyadesu 000123DD,なんだコノ・モノズキ<TAB>000123DD,Daisuki ,なんだコノ ,モノズキ //ここまで <TAB>は実際にはタブに置き換え と、したいのですがどのようにすれば正規表現で置換する出来ますか? "・"の数がまちまちなのと、行全体は残しつつ次の行に分割することが出来ず悩んでいます
>行全体は残しつつ 行全体を同じ物で置換
>>64 鬼車に置換機能はないというのはおいとくとして、
数が不定という点で正規表現だけではどうにもならんな。
$1とかで取り出す以上、上限を決めるとかしないと。
>>65 ()の中に()も出来るのか…なんでできないと思い込んでた。
行全体の方は解決できました。ありがとうございます。
>66
理解できてませんでした。サクラエディタ使ってます。
"・"の数は 無し,1個,2個 のいずれか。
現状でこんな感じのものを作ってみたのですが変な所で切れたり"・"が残ったりします
空白行は消すのであっても構いませんのですが、良い方法は在りませんか?
([0-9]{2}[a-zA-Z0-9]{6},(.+)・(.+)・?(.+)\t.+)
\1\r\n,\2\r\n,\3\r\n,\4\r\n
//ここから
0001233C,ソレ・ナンテ・エロゲ 0001233C,Sore nante eroge
,ソレ・ナンテ
,エロ
,ゲ
//ここまで
^([^,]+,([^・\t]+)・([^・\t]+)(?:・([^・\t]+))?\t.+)$
>>68 希望通りの分割が出来ました
良く分からない所があるのですがもう一度解説している所を読んで理解したいと思います
有難うございました
[^・\t 顔文字に見えた。 堅め開けた、しわくちゃの老人
71 :
デフォルトの名無しさん :2011/12/29(木) 22:53:43.17
正規表現を使って、@マークが先頭にある半角数字に処理をかけたいと思っています。 ex.) @12345 ただ、データの中に「<a href=”〜”>@12345</a>」のようにHTMLタグのリンクタグが付与している場合があり、その場合でもマッチするようにしたいです。 「<a href=”〜”>@〜</a>」でも「@〜」でもマッチするようにするにはどうすればいいのでしょうか?
<a href="[^"]+">@\d+</a>|@\d+ こういうことかな? いまいち質問がわかりづらい 次に質問するときはテンプレつかってくれ
73 :
デフォルトの名無しさん :2011/12/29(木) 23:34:40.12
鬼車なんてあったんだ隠語かと思ったら正式名称か
>>71 @\d+ でいずれもマッチするが、簡単すぎてどこで躓いているのかよくわからん
ごめん行頭と読み違えた
>>73 このスレにいてRuby 1.9に使われてる正規表現エンジンの名前を知らんとはな。
スレのテンプレに、主要な正規表現ライブラリの紹介があってもいいかもしれない。
正規表現のエンジンも色々あるからな だからこそ環境書けと言われるワケで 逆に環境以上のことは蛇足じゃねーの
質問用テンプレということではないのだが。
このスレのレベルの低さは前スレ見れば分かる。回帰も知らないゴミの集まり。
82 :
デフォルトの名無しさん :2011/12/30(金) 22:00:14.08
>>72 無事希望通りなものができました。
また質問が出たときはテンプレ使って質問しようと思います。
ありがとうございました。
●検索か置換か? 置換 ●説明 reverse関数のように、文字を逆順にする 対象は半角のみで、全角は使わないので考慮しないで構わない ●対象データ 114514 810snpi go ●希望する結果 415411 ipns018 og
つreverse関数
85 :
デフォルトの名無しさん :2011/12/31(土) 14:29:13.56
C#で以下の文字列lineからURLを抽出したいと思っています。
The document has moved <a href="
http://www.hoge.com/ ">here</a>.
Match m = Regex.Match(line, "href=\"(
http://\S )\"", RegexOptions.IgnoreCase);
↑そこでそういうプログラムを組んでみたのですが正規表現の部分でエラーが発生してコンパイルエラーになってしまいます。
正しくプログラムするにはどうしたらいいでしょうか?
86 :
片山博文MZ ◆0lBZNi.Q7evd :2011/12/31(土) 14:31:08.49
\\
urlを抽出する際に、httpsを考慮する必要はありませんか。
(https?://\\S+) そこまで考えるなら、パーサのHTML Tidyを使う。
91 :
85 :2011/12/31(土) 14:57:57.85
みなさんアドバイスありがとうございます。 \をもう一つ付けることでコンパイルに無事成功しましたm(_ _)m
+もつけないとマッチしないよ。。。
\Sを使うこと自体間違ってる。誤爆の可能性あるよ。
つうかC#なら@""使え
そういや@""の中で"を使うにはどうしたらいいんだろう?
エスケープできないの? 記号としての\を使いたい場合、\\になるように、 \"とかが用意されているのでは。
@"printf(""hello"")" みたいに " を二回続ける(スレチ)
詳細正規表現って本5040円もするけど安く手に入れられないかな。
>>98 アマゾンに\4,000(送料別)の中古があったよ
●正規表現の使用環境 C# ●検索か置換か? 置換 ●説明 文字列の先頭の部分のカッコを消したい ●対象データ (hoge)あいうえお ●希望する結果 hogeあいうえお よろしくお願いします
^\((.*?)\)(.*) \1\2
あけましておめでとう ●正規表現の使用環境 perl5 ●検索か置換か? 置換 ●説明 全角,句読点と半角の間を消したい 半角と半角は無視 ●対象データ みんなの憧れ Justin Drew Bieber が大好き 私だけの Justin が欲しい やっぱ Bieber 、Bieber って響きがいいよね ●希望する結果 みんなの憧れJustin Drew Bieberが大好き 私だけのJustinが欲しい やっぱBieber、Bieberって響きがいいよね 今までは([ぁ-煕]+)と([0-9A-Za-z]+)を組み合わせて何回もやっていたのですが 例題の1行目の様な物が煩わしいので一括に処理したいです お願いします
[ ]*([ぁ-煕]+)[ ]* ↓ \1
>104 ご回答ありがとうございます しかし、それでは全角と半角の間以外のスペースも消えてしまうので 想定した動きと違います。ごめんなさい。
[ぁ-煕]ってUnicodeだと使えないがいいんかな。
文字列「犬」と「猫」を含む一行を検索するときは (犬.*猫)|(猫.*犬) と書けばいいですよね では、文字列「犬」と「猫」と「鳥」と「牛」の全てを含む一行を検索する場合はどのように書けばいいのでしょうか?
if文使うのが計算量少ないと思う。 正規表現だけは諦めて。
このように一つでも見つからなければFALSEを返す関数。 A=array("犬", "猫", "鳥", "牛"); function hantei(str) { for(n=0; n<count(A); n++) if(str.find(A[n])==FALSE) return FALSE; return TRUE; }
(?=.*犬)(?=.*猫)(?=.*鳥)(?=.*牛)
111 :
104 :2012/01/02(月) 14:47:35.93
>>106 たまに誤認識シてたのはそれだったのかも知れませんね
unicode対応らしい物を探してきました
・(英数字以外) (英数字)のパターン
([^([,?!-<>?….!々〇?\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF])]) ([々〇?\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]+)
・(英数字) (英数字以外)のパターン
([々〇?\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]+) ([^([,?!-<>?….!々〇?\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF])])
とりあえず個々には動作してるように見えるのですが、これをひとつに纏めつつ
「全 半 全」「全 半 半 全」「全 半全」「全半 全」を満たすように書き換えたいのですがそれがわかりません…
日本語のコードは正規表現で使わない方が良い。 検索対象の文字コードに依存する。 ASCIIだけの特徴を使って検索するのが、仕様変更などにも対応できる可能性。
113 :
112 :2012/01/02(月) 15:03:03.29
こんなのやってみたが。消しきれず。 [ ]*(([0-9A-Za-z]+ ?){1,})[ ]* \1
114 :
112 :2012/01/02(月) 15:05:57.04
英文とその前後の空白にヒットさせるという方法だが、終わりの空白が取り除けない。
ほらよ (犬.*猫.*鳥.*牛)|(犬.*猫.*牛.*鳥)|(犬.*鳥.*猫.*牛)|(犬.*鳥.*牛.*猫)|(犬.*牛.*猫.*鳥)|(犬.*牛.*鳥.*猫)|
116 :
112 :2012/01/02(月) 15:11:27.97
これで例文はできた。 [ ]*(([0-9A-Za-z]+ ){0,}[0-9A-Za-z]+)[ ]* \1
頭に犬が来ない場合はどうするのかと
>>117 最後が|だから、これからシリーズでUpしてくれるよ
24通り書く気かよw 十二支の場合はどうする気だよww
ループでそとつヒットしなかったら探索終了が速いって。 正規表現で全パターンは負荷かかりすぎ。
逆に、 ^((?!犬).)*$|^((?!猫).)*$|^((?!馬).)*$|^((?!鳥).)*$ を削除すれば
(?:犬(?:(猫)?鳥牛(?(1)|猫)|(鳥)?猫牛(?(2)|鳥)|牛(?:猫鳥|鳥猫))|猫(?:(鳥)?牛犬(?(3)|鳥)|(牛)?鳥犬(?(4)|牛)|犬(?:鳥牛|牛鳥))|鳥(?:(牛)?犬猫(?(5)|牛)|(犬)?牛猫(?(6)|犬)|猫(?:牛犬|犬牛))|牛(?:(犬)?猫鳥(?(7)|犬)|(猫)?犬鳥(?(8)|猫)|鳥(?:犬猫|猫犬)))
どう見ても京都猛禽類研究所です。本当にありがとうございました
124 :
122 :2012/01/02(月) 16:28:08.70
ごめん、質問をちゃんと見てなかったわ これでおk 長すぎるって怒られたから改行しといた (?:犬.*(?:(猫)?.*鳥.*牛.*(?(1)|猫)|(鳥)?.*猫.*牛.*(?(2)|鳥)|牛.*(?:猫.*鳥|鳥.*猫))| 猫.*(?:(鳥)?.*牛.*犬.*(?(3)|鳥)|(牛)?.*鳥.*犬.*(?(4)|牛)|犬.*(?:鳥.*牛|牛.*鳥))| 鳥.*(?:(牛)?.*犬.*猫.*(?(5)|牛)|(犬)?.*牛.*猫.*(?(6)|犬)|猫.*(?:牛.*犬|犬.*牛))| 牛.*(?:(犬)?.*猫.*鳥.*(?(7)|犬)|(猫)?.*犬.*鳥.*(?(8)|猫)|鳥.*(?:犬.*猫|猫.*犬)))
>>116 試してみたのですが 「aaaaa - aaaaaa」 や 「aa aaaa」なども消えてしまいます
全角と半角の間のスペースを消すだけなので、例題に載せなかったのがいけなかったのかもしれません。
>104を正規表現で表現するのは難しいのでしょうか?
環境は多分utf-8なので条件依存していても構わないのですが。
127 :
126 :2012/01/02(月) 16:31:28.71
>104を正規表現で表現するのは難しいのでしょうか? ↓ >103を正規表現で表現するのは難しいのでしょうか? に修正します。すみません
>>126 >しかし、それでは全角と半角の間以外のスペースも消えてしまうので
例えばどういうの?サンプルが少なすぎる
十二支の方が簡単そうじゃね 子・丑・寅・卯・辰・巳・午・未・申・酉・戌・亥だろ? あまり使われなさそうな文字列をピンポイントで検索するとか → (戌.*亥)|(亥.*戌) 又は → (猪.*亥)|(亥.*猪) とりあえず上のように検索してダメだったら別の文字列を変えればいい
>>126 半角の英文と見なす記号・文字を追加。これは-の場合。
[ ]*(([0-9A-Za-z\-]+ ){0,}[0-9A-Za-z\-]+)[ ]*
131 :
129 :2012/01/02(月) 16:40:57.27
ちがうちがう → (戌.*亥)|(亥.*戌) 又は → (戌.*猪)|(猪.*戌) だな 猪を二頭探してどうする俺w
全[space] → 全 [space]全 → 全 の2回に分けるのじゃだめ?
英文か、全角日本語しかないんだろ。 英文とその前後の空白を特定できれば済むんだよ。
>128 元データは出せないので書き換えましたがこんな感じです <元> みんなの憧れ Justin Drew Bieber が大好き 私だけの Justin が欲しい やっぱ Bieber 、Bieber って響きがいいよね Justin : お前が好きだよ。大好きだよ。 そう耳元で囁かれると 私 はトキメイた。 身も心も Justin Drew Bieber の物。 私はベットの布団の中で一人悶えていた。 May - Friday the 13th... <後> みんなの憧れJustin Drew Bieberが大好き 私だけのJustinが欲しい やっぱBieber、Bieberって響きがいいよね Justin : お前が好きだよ。大好きだよ。 そう耳元で囁かれると 私 はトキメイた。 身も心もJustin Drew Bieberの物。 私はベットの布団の中で一人、悶えていた。 May - Friday the 13th... >132 それは>111ですよね。それしか無いでしょうか
スペース一個抜けてましたこっちです <元> みんなの憧れ Justin Drew Bieber が大好き 私だけの Justin が欲しい やっぱ Bieber 、Bieber って響きがいいよね Justin : お前が好きだよ。大好きだよ。 そう耳元で囁かれると 私 はトキメイた。 身も心も Justin Drew Bieber の物。 私はベットの布団の中で一人悶えていた。 May - Friday the 13th... <後> みんなの憧れJustin Drew Bieberが大好き 私だけのJustinが欲しい やっぱBieber、Bieberって響きがいいよね Justin : お前が好きだよ。大好きだよ。 そう耳元で囁かれると 私 はトキメイた。 身も心もJustin Drew Bieberの物。 私はベットの布団の中で一人、悶えていた。 May - Friday the 13th...
[ ]*(([0-9A-Za-z\-:\.]+ ){0,}[0-9A-Za-z\-:\.]+)[ ]*
>137 この行のスペース2個は難しそうですか? 身も心も Justin Drew Bieber の物。
どこにspace2個あるんだよ?
>>111 どっから持ってきたかは知らんが、
>>112 も書いてるようにやめた方がよい。
せめて \p{ASCII} みたいな文字プロパティにすべき。
>>124 は24通り全部並べる代わりに条件分岐使ってまとめてあるだけだが、
やってることは変わらないし、条件分岐使える環境なら先読みも使えるはず。
結論:先読み検索できる環境にデータごと移行させろ
「出資者は無理難題をおっしゃる」 データ加工に便利な環境に移せるなら、それも手ですね。
>>139 2chだとわからなくなっちゃうのでしょうか。わかりにくくてすいません
身も心も Justin[][]Drew Bieber の物。
コピペすると分かるのですがここに2個スペース入っていました。
スペースが2個あると消えてしまうようでしたが事前にスペース2個を1個に変換することにします
毎日使っているものなので大切に活用させて頂きます。有難うございます
147 :
デフォルトの名無しさん :2012/01/02(月) 23:52:34.43
●正規表現の使用環境
javascript
●検索か置換か?
検索
●説明
以下の2つのデータ共にマッチするようにしたい
●対象データ
<a href=”
http:// 〜.hogehoge.com/〜/”>〜</a>
<a
http:// 〜.hogehoge.com/>〜</a>
/<a href=”
http:\/\/.+?\.hogehoge\.com\/.+?\/? ”>.+?<\/A>/gi
のようにコードを書いてみたのですが、どうもうまくいきません。
どのように記述すればいいのでしょうか?
それ本当は「2つのデータにマッチ」が目的じゃないだろ テンプレ使うならちゃんと希望する結果まで書けよ
<a href=”
http:// 〜\.hogehoge\.com/〜/”>〜</a>|<a
http:// 〜\.hogehoge\.com/>〜</a>
これでどちらのデータにもマッチする
151 :
てすすき :2012/01/03(火) 00:55:19.17
●JavaScriptかPHP(なければなんでも) ●置換 ●現在パターンにマッチしている回数(試行回数でも)を置換後に埋め込むことできましたっけ? ●あいうあいうあいう・・・ ●1あいう2あいう3あいう・・・
var count = 0; var callback = function(x) { return (++count) + x; }; "あいうあいうあいう".replace(/あいう/g, callback);
153 :
てすすき :2012/01/03(火) 09:44:43.57
>>152 ありがとうございます
あコールバックありましたねphpも探したらありそう
正規表現だけだと無理ですよね
154 :
147 :2012/01/03(火) 10:58:55.34
>>154 /<a href=\"
http:\/\/ (.+)\.hogehoge\.com\/(.*)\/?\">(.*)<\/a>/
置換したい文字列を"$1,$2,$3"とかにすれば
上は mag,sky,ほげほげ
下は mos,,もげもげ
みたいに置換されるんじゃないかな。
156 :
147 :2012/01/03(火) 13:51:54.18
>>155 /<a href=\"
http:\/\/ (.+)\.hogehoge\.com\/(.*?)\/?\">(.*)<\/a>/
と記述したところ
>上は mag,sky,ほげほげ
>下は mos,,もげもげ
と動くようになりました。
ありがとうございました。本当感謝です。
●正規表現の使用環境 PHP 5.2 で出来ればpreg_replace()で。 ●検索か置換か? 置換 ●説明 "/foo/bar/baz/qux/" を "/home/bar/baz/qux/" に置換したいです。 fooの文字数は不定です。 ●対象データ /foo/bar/baz/qux/ /qwert/asd/fghjk/klzxv/ /qazwsx/edc/rfvt/gbyhnu/ /4756/78674/45756/34545/4564/546/ ●希望する結果 /home/bar/baz/qux/ /home/asd/fghjk/klzxv/ /home/edc/rfvt/gbyhnu/ /home/78674/45756/34545/4564/546/
>>157 PHP Version 5.3.8で確認済み。
<?php
$string = '/foo/bar/baz/qux/'; // 配列でforeachして下さい。
$pattern = '/^\/[^\/]+\//';
$replacement = '/home/'; // 恐らDEFINEした定数の方がいいと思います。 define REPALCEMENT_STRING = 'home';
echo preg_replace($pattern, $replacement, $string);
?>
●正規表現の使用環境 テキスト ●検索か置換か? 置換 ●説明 文章内の指定した数の改行毎に、行を一段開けたい。 下記例文なら改行三つごとに行を一段開けたい。 ●対象データ (例文) 人は誰しも初体験にはほろ苦く、甘酸っぱい思い出があるものだが、人生の諸先輩方はどんな童貞喪失体験をしたのか? 「シリーズ初体験」−−現在70歳の会社役員(兵庫県)が当時の思い出を語った。 中学2年の時、国語の女教師に「勉強を教えてあげるから家においで」といわれ、夏休みに入ってすぐに先生の家を訪れました。 教師になって3年目、美人ではないけれど、私にとっては優しいお姉さんのような存在でした。 何人かいるのかなと思ったんですが、先生の家に行くと私の他は誰もいませんでした。 勉強を教わり、夕食をご馳走になり、その日は泊めてもらいました。 夜中、下半身がもぞもぞするので目が覚めると、先生が私の浴衣の裾を広げていました。 ●希望する結果 人は誰しも初体験にはほろ苦く、甘酸っぱい思い出があるものだが、人生の諸先輩方はどんな童貞喪失体験をしたのか? 「シリーズ初体験」−−現在70歳の会社役員(兵庫県)が当時の思い出を語った。 中学2年の時、国語の女教師に「勉強を教えてあげるから家においで」といわれ、夏休みに入ってすぐに先生の家を訪れました。 教師になって3年目、美人ではないけれど、私にとっては優しいお姉さんのような存在でした。 何人かいるのかなと思ったんですが、先生の家に行くと私の他は誰もいませんでした。 勉強を教わり、夕食をご馳走になり、その日は泊めてもらいました。 夜中、下半身がもぞもぞするので目が覚めると、先生が私の浴衣の裾を広げていました。 ------------------------- よろしくお願いします。
.*\n.*\n.*\n \0\n
\0でマッチした部分全部を参照できる環境があるのか 後学のために環境名をおしえてくれ
たとえばPHP使うとマッチ全体がゼロ番目に入ることがprint_r使うと分かるが。
あとpythonもかな。 perl: $&、python: \g<0>
>>160 はこっちがいいということか。
(.*\n.*\n.*\n)
\1\n
Emエディタでは、 .*\n.*\n.*\n と (.*\n){3} ではマッチに差が出る。 これは正常なのか。
文字列「ソース」を含む行を抽出したい ただし「リソース」「ソース顔」などは弾きたい この場合、どのように表記すればいいのでしょうか? ^ソース$ くらいしか思いつきませんでした どなたかご教授お願いします
質問があいまいで答えようがない
>>170 完全には無理。
「ソースがおいしい」
という行があった時、それが「ソース顔の石井さん」という意味ならヒットしてはいけないし、
「ソースが美味しい」という意味なら、ヒットしてほしい。
正規表現だけで、完全に判別するのは不可能だ。
>>171-172 レスありがとうございました
割り切るようにします
検索地獄から解放されて良かったです
>>173 \bソース\b
とかどうでしょうか?
ちなみに\bは単語境界にマッチする幅0のメタ文字で、
上記はテキストエディタ等で単語検索とか
ワード検索とかよばれるものと等価です
それは英語などでは有効な手法だけど、日本語の文章を対象にする場合ほとんど無意味
形態素解析で下ごしらえが必要。
「ソース」の前後がカタカナではない 「ソース」の後が漢字ではない で手間は省けるか?でもどうかくのかな
できないこともないんだけど、ソースの後が漢字ではないを指定できたとして、 「この料理をおいしく食べるためにはソース選びが重要」の「ソース」が排除されるよ。
正規表現は日本語文字列には向かないからな
正規表現がどうって話じゃないでしょ。 boxを抽出したいけどtreasure boxは弾きたいって言ってるようなもんでしょ。
もし自分がやるとしたら、ソースの前後がカタカナではないという条件にするかな。それで大半はうまくいくはず。
ソース顔とかはヒットしてしまうが、後で結果を見直して、手動で消去する(手動が許されるなら)。
ただ、その場合、ソースコードとかトンカツソースとかも除去される。これはソースの意味だから除去したくないと
いうのであれば、難しいね。思いつく単語を別途ORで結んでヒットさせるという手もあるが、ウスターソースとか
ソースファイルとか、いくらでも思いつくし。
それか、たぶん
>>170 は調味料ではなくてプログラムのソースのことを指しているのだと思うので・・・。
検索元の文書がプログラミングに関する文書であって、トンカツソースとかの単語は入っていないのが明白であれば、
「リソース」を省かせるだけでも十分な気がする。その場合、
(?<!リ)ソース
または
^ソース|[^リ]ソース
でいける。
まあ、何のために検索したいかによるよね。ちょっと多少ゴミが混じってもいいというのなら上記のでいいと思うけど、
完璧にヒットさせたいと思うなら、正規表現では無理だ。
>>180 日本語の場合分かち書きしないから単語境界も使えない、
というわけで、日本語は正規表現も含めて検索性が悪いよ。
getを検索してnuggetを弾くようなことも難しいわけ。
>>180 は単語境界が使える英語でさえ処理が難しいケースを挙げてるんだと思うよ
英語でも難しいケースはあるが、英語の場合日本語よりは楽なので 「正規表現は日本語文字列には向かない」というのにはそれなりの妥当性がある
185 :
デフォルトの名無しさん :2012/01/14(土) 13:33:31.04
C#.netで正規表現で文字列チェックするんだけど、 正規表現って、普通に1文字チェックするより高速なの?
本当に速度がクリティカルに効いてくる状況ならちゃんと測定すべき。 そうでないなら実装しやすい方で。
ソースファイルとか普通に使うよ
188 :
デフォルトの名無しさん :2012/01/14(土) 14:35:46.57
>>186 馬鹿丸出しの質問にレスありがとう。
やっぱそうだよね、場合によるよね。
比較の記事とかネットにないかぐぐったけどなさげだったので質問してみました。
実際自分でコード書くよりライブラリ使った方が 速いときが多いよね コードの洗練さとかの関係で
日本語は助詞でつなぐからな 英語だと半角スペースがあるので指定単語を抽出しやすい
ここではきものを脱いでください BGMによって着物か履物かわかれる。
BGM?
加トちゃんのBGMなら着物を脱ぐんじゃないの
「一休さん」くらいの文言で良かったのに…
このはしわたるべからず、ってやつ?
それはそうと
>>191 の例は超有名。BGMはシラネ
木の葉皺たるべからず 木の葉は皺であるはずがない
●正規表現の使用環境 秀丸エディタ ●検索か置換か? 置換 ●説明 <div class="main">の場合に限り、両端のdivをspanに置換したい。 ※<div class="main">から</div>までの行数は、3行だったり5行だったりと色々変わります。 ●対象データ <div class="main">あああああ<br> いいいいい<br> ううううう<br> えええええ<br> おおおおお<br> </div> ●希望する結果 <span class="main">あああああ<br> いいいいい<br> ううううう<br> えええええ<br> おおおおお<br> </span> 下の正規表現を作ってみたのですが検索でマッチしません。 どなたか助言頂けるとうれしいです。 よろしくお願いいたします。 置換元 <div class="main">(.*\n*)</div> 置換先 <span class="main">\1</span>
<div class="main">(.*\n?)*?</div> 適当だけどこれでどうだろう
>>198 うーむ、マッチしないみたいです。。
レスありがとうございます。
([.\n]*?) でもだめなのかな
203 :
202 :2012/01/15(日) 03:02:39.67
被った。。。ゴメン
お返事遅くなってしまいましたごめんなさい。
晒すような形になってしまうのでどうかと思ったのですが、
フィードバッグ?した方がいいと思ったので一応結果を添えます。
>>200 <span class="main"></span><<span class="main"></span>d
<span class="main"></span>i<span class="main"></span>v
<span class="main"></span> <span class="main"></span>c
<span class="main"></span>l
と、spanが続くようでした。
(本当は改行になってないです、もっと続きますが長くなるので以下省略。)
>>201 <span class="main"></span>
と間の文章が無くなるようでした。
>>202 無事出来ました。
秀丸のバージョンもちゃんと書いた方が良かったかもですね、ごめんなさい。。
URLまで頂いてありがとうございます。
解決した正規表現見てもなかなか理解が進まないのでもっと勉強します。
レス下さった皆さん本当にありがとうございます。感謝です。
205 :
200 :2012/01/15(日) 14:26:26.74
>>204 そういう風に使うもんじゃなかったんだけど、そもそも秀丸固有の問題があるのを知らなかったごめん。
206 :
デフォルトの名無しさん :2012/01/16(月) 19:34:46.94
掲示板にあるURLやアンカを削除するために、compileメソッドの引数にURLとアンカの正規表現を使いたいんですがどう書いたら良いですか?
207 :
デフォルトの名無しさん :2012/01/16(月) 19:40:09.08
あれ、このスレになかった? 頻出だとおもうんだけどなぁ
Javaで動く出来合いのコードが欲しいんだろう
210 :
デフォルトの名無しさん :2012/01/16(月) 21:05:33.12
>>209 さんのおっしゃる通りです。宜しくお願いします。
どこの掲示板かとかdatなのか見た目なのかとかで変わってくる。 一口にurlと言ってもurlにもいろいろあるからどこまでをurl扱いにしたいかってこともある。 urlにマッチさせる正規表現を作って公開してるサイトとかあるけどRFC準拠のurlにマッチするように 作られたものは準拠してないurlを取りこぼす。 ちなみにurlよりやっかいなのがメールアドレス。どこまでメールアドレスとして認識させたいかが その状況によって大きく変わってくるから。
Bashスクリプトのif文で正規表現ってかけないのかな? if [ ${INPUT} = [0-9] ]; then echo "数字です" fi こんな感じでいけそうだけど上手くいかない
正規表現使ってるのあんまり見かけないけど一応書けるらしい $ input=1aaa5; if [[ $input =~ ^[1-9]+$ ]]; then echo t; fi $ input=12345; if [[ $input =~ ^[1-9]+$ ]]; then echo t; fi t
214 :
206 :2012/01/17(火) 02:43:42.22
>>211 教えて頂きありがとうございます。
では試しに2chの場合どう正規表現で書くのでしょうか?
2ch掲示板のdatファイルを見るとURLの終わりに半角空白があるので"^(http|https).*/s"といった感じでしょうか?
アンカの正規表現は思い付かないですorz
215 :
デフォルトの名無しさん :2012/01/17(火) 03:22:55.40
性器表現
ホスト部は数字も含むでよ
桜蘭高校ホスト部は関係無いだろ
落ち着け。
220 :
206 :2012/01/17(火) 21:42:42.74
>>216 ありがとうございます。参考にさせて頂きます。
まあなにか終わりを判別するものがないと困るから、 (まだURLが終わってないってことになるから) URLの「後ろに」空白文字(改行含む)を書いてる人が多いだけでしょ。
特に困らないよ。 日本語URLとかかかれちゃうと困るけど
全角文字(2バイト文字?)だけを検索するには なんと書くんでしょうか?
[ぁ-ヶ]|[亜-K]
正規表現以外で文字列検索するなら最強の検索方法は何でしょうか?
Procmailで転送設定していたのですが、正規表現でどう書けば
いいのか分からないので教えてください。
* ^(From).*
[email protected] .Sent.2012/
上記の条件で転送していたのですが、上記だとResent-From:の
ヘッダが先に条件として判定されてしまうようで、Resent-Fromでは
なくFromが○○だったら。としたいのですがどうすれば良いでしょうか。
228 :
227 :2012/01/18(水) 10:26:12.57
自己解決しました。ANDで条件書けば良いだけでした。失礼しました。
229 :
デフォルトの名無しさん :2012/01/20(金) 00:31:32.03
2時間ほど悩みましたが、解決方法が見つからないので教えて下さい。 検索条件 ★で始まり、間に「あ」を挟み、★でおわる ★と「あ」の間にはx文字(0〜10文字)ランダムに挟まっている 例文 ★123あ133s★124か1256★863あ13qw3s★1rtyさ12fd★あ1s★ 抜き出したい箇所 ★123あ133s★ ★863あ13qw3s★ ★あ1s★ どなたか頭のいいかた解決方法教えて下さい。
★.*?あ.*?★
プリクラでメンチ切ってる武丸さんみたいな正規表現だな
>>229 >>1 環境によっては"量指定子?"の最短一致は使えないんじゃないかな
せっかく10文字という条件が出てるので、
★[^あ]{0,10}あ[^★]{0,10}★
「あ」と「★」の間も0〜10文字でいいと勝手に解釈したー
{n,m}が使える環境なら*?も使えるんじゃね?
234 :
デフォルトの名無しさん :2012/01/20(金) 01:45:42.30
>230 >232 有難う御座います。 解決しそうです
教える側のレベルが低すぎてどうしようもないなこのスレ・・
そんなことをぼやいているようじゃやってけないぞ
239 :
デフォルトの名無しさん :2012/01/20(金) 11:49:25.16
質問させてください。 半角文字列にスペースが含まれています。 例 727 751 798 625 791 460 645 850 656 697....... このスペースをカウントして,3つめのスペースだけを改行に置換する場合(下) 727 751 798 625 791 460 645 850 656 697....... どう表現すればいいのでしょうか? 数値が全て3桁ならば分かるのですが,2桁や4桁が含まれており文字数ではマッチできません。 よろしくお願いします
/(\d+\s\d+\s\d+)\s/g --> $1\n
241 :
239 :2012/01/20(金) 13:54:10.15
>240 すみません,質問の仕方がまずかったのかも。 教えていただいた表現では置換されませんでした。 使用環境はMacです。
テンプレ読み直せハゲ
243 :
デフォルトの名無しさん :2012/01/20(金) 13:59:42.25
>241 >1の説明に 「質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。 」 と書いてありますよ。
244 :
239 :2012/01/20(金) 14:04:16.68
申し訳ありません 使用環境は MacOS, 10.6 iText Express です。 よろしくお願い致します
>>241 自分の使っている処理系のヘルプを読め。
正規表現は合ってるし、おそらくこれが使えない正規表現エンジンはないか、ほとんどない。
置換先が違うのかも。\1とか。 でもそれぐらいは質問者で対応するか。
249 :
239 :2012/01/20(金) 17:59:18.96
すみません 初めて正規表現を使うのでよく理解出来ていないかもしれませんが, MacOS, 10.6,iText express では鬼車とよばれる正規表現ライブラリ が用いられることは理解できました。 ただ問題の構文では検索が出来ません。 Mac では円記号の代わりにバックスラッシュを用いても結果は同じなのでしょうか?他にもなにか気をつけなければいけないことってあるでしょうか?
ソフトの使い方はスレ違いだから 気を付けてくれたまえ
>>249 簡単な正規表現なのでそのソフトを使ってる人に片っぱしから聞くのが早いよ
該当スレがあればそっちで聞く
あるいは正規表現で検索/置換するウインドウと
ヘルプの該当項目のスクリーンショットを撮ってどこかにUPすれば答えられるかもしれない
252 :
239 :2012/01/20(金) 18:15:13.39
レスありがとうございます 出直してきます
253 :
デフォルトの名無しさん :2012/01/20(金) 18:29:48.66
二度とこなくていいよ^^
マック板は2つもあるんだから そこで糞スレでも立てとけば暇な人がやってくるよ
Macは「これ!」というエディタが無いのがな〜 Cot editorもWindowsのSakura editorに比べたら数年前世代の出来だし
Sakura、ここ数年でそんな変わってんの?
内部コードがUNICODEになった。
鬼車って英語で言うとDemon Car って言うらしいよ。 興奮先生が言ってた。
日本語の「鬼」に相当する概念がないからアレ
じゃあ鬼を定義してみる ・角が生えるイメージ戦略 ・既婚女性(鬼女)
ONI Devil
Daemon Carなら許せるがな。
264 :
232 :2012/01/21(土) 01:33:06.76
無理やり英語にする意味がわからないw<oniguruma
>>246 Σ(´∀`;)、指摘サンクスです。
★[^あ★]{0,10}あ[^★]{0,10}★
ですかね。
しかし、★あ★あ★あ★の場合、1個目と3個目にしかマッチしないんだよな
プログラムで検索位置を調整するとかなんだろうけど、
まあ
>>229 の環境がわかんないんで気にしてもしょうがないか。
>>236 ハンセイ…精進します
そんなこんなでOgreKitって名前がついたんでしょう
オグレかとオモたらオーガだったのか
>>264 ★あ★あ★あ★
から
★あ★
★あ★
★あ★
を抜き出すのは無理。
あ、間違った…
見つかった先頭位置から1文字ずらしてけばいいじゃん
それと★をセパレータとみなしても取り出せるし 自分で正規表現組めないなら無理して使う意味ないよ
多くの環境では無理じゃない。環境書かないから答え書かない。
会話本文と置換したい文が紛らわしい。 もうちょっと書き込み見直してよ('A`)
>>269 見つかった先頭位置?
末尾の位置 (lastIndex) じゃなくて?
>>270 え?セパレータ?
>>229 /★[^★あ]*あ[^★]*(?=★)/g
アスキーアートを正規表現に変換して文書から除去したいんですがどう書けば良いのでしょうか?
276 :
デフォルトの名無しさん :2012/01/21(土) 22:22:11.57
>>277 教えてくださって恐縮なんですがどれが正しいアスキーアートの正規表現なのか解らないですorz
専用スレで聞けってことだよ
>>248 鬼車はUnicodeで使うと\dが全角数字にマッチするし、
\sは全角スペース等にもマッチするようになる
(\wはASCIIの[A-Za-z_]以外にも多バイト文字にもマッチする)
鬼車を正規表現エンジンで採用してるRuby 1.9系列は内部Unicodeだけど
\dが全角数字にマッチしないように細工してる
\sも細工してるかは忘れたけど、\wは細工ないので、
多バイト文字にもマッチする
鬼車はオプション次第で動作がかなり変わるから、「鬼車は、〜だ」という言い方は出来ないな。
>>281 が書いたような細工をしてから使っているという話もよく聞くから余計に。jane view作者もいじってから使ってる。
全然正規じゃないよね
>>281 Rubyは\wもいじってる。(でも\bはいじってない。)
>>284 ¥bって¥wと¥Wの境目だと思ってたんだけど、¥wいじって¥bいじらないと
その関係が成り立たなくて困らないんだろうか
a、bどちらかの一文字にマッチ、という場合 a|b と [ab] はどちらかが好ましいってのはある?
本来の「正規表現」だと、[ab]はa|bの糖衣表現でしかないから差はない。 ただ今のは全て拡張正規表現だから実装による。大差ないだろうけど。 見た目的にはa|bは結局カッコで囲む必要があるケースが多くうざくなりがち。
288 :
286 :2012/01/23(月) 11:53:16.85
[a-z]の範囲指定は|の列挙より効率いいこと多いでしょうね。
速度よりも可読性を優先してます。
>>285 Rubyでは\p{Word}と\P{Word}の境目とされている
環境によって動作が変わる\wとかは最初から使わないようにしてる。仕様変更に弱くなるから。
全然正規じゃないよね
そもそも正規ってどういうこと?
「正規」って珍訳じゃないか?って人に言ったら、解ってないなと言われいろいろ説明されたことがある。実際どうなの?俺は原典読んでないんだけど。
>296読んで、それを人に説明できるかは難しい
正則集合がわからない人間に説明するのは難しい。 形式言語の3型文法を教えるのが簡単だと思われる。
テキストファイルの中に foo=bar という形式で設定値が列挙されています。 grepかegrepだけでfoo=の右辺値のbarを抽出する正規表現はどうなるでしょうか? (?<=foo=).* とかやりたいんですけどgrepもegrepもこの式を受け付けてくれません。
grepってパターンにマッチする *行* を表示するプログラムじゃないの? マッチ部分だけが欲しいならsed使うんじゃなくて?
ちなみにsedなら sed -n -e '/^foo=/s///p'
なるほど。 ?sed -e "s/\(foo=\)\(.*\)/\2/" testfile.txt で抜き出せました。grepとegrepにこだわっていたのが敗因でした。 ありがとうございました。
余談だがパラメタ展開しないならシングルクォート使うとシンプルになるよ
-oオプションはGNUだけ? grep -Po '^foo=\K.*' FILE
おお。perlオプションなんてあったんですね。 Pつきなら (?<=foo=).* でOKでした。
>>306 \Kが使えるなら、おそらくそっちの方が戻り読みより効率がよい。
308 :
◆x0X2ba5fI. :2012/01/27(金) 19:59:37.19
javascript 同一文字長さ1-5の文字列がある(例:a,aa,..,aaaaa) これを3回以内の置換で2文字以内の一意の並び(例:0,1,00,01,10)にできる? 出力に元の文字を使うことは可能
書き込む前に意味が通るようによく推敲しろ
310 :
◆x0X2ba5fI. :2012/01/27(金) 20:41:45.68
例示してあるのに意味がわからないなら黙ってた方がいいと思うんだな僕は
aaaaa/ab aaaa/bb aaa/b に置換したならば a,aa,aaa,aaaa,aaaaa は a,aa,b,bb,ab となり要求を満たす よって可能
>>311 しかし普通は問題の原文は a,aa,aaa,aaaa,aaaaa ではなくa,aa,aaa,aaaa,aaaaaの
うちどれかの文字列ということになる。
ネットで検索したら、正規表現練習ツール とかいうのがあるけど、これって練習につかえる?
最終的に何がしたいのかを隠してるから、この質問に対する答えでは 最終的な解決にならない可能性が高い。そして新たなゴミ質問をしてくるという無限ループ。
\Kなんていう便利な正規表現って一体どこで見つけたの? 何冊か本読んで探してみたけどどこにも書いてない。
>>313 正規表現は使ってナンボだと思う。
実戦こそ学習の場。
練習ツールよりも実戦って言ってるみたいだけど…
そんなもん使ってる暇があったら実戦で覚えろって言ってるんだろ
>>317 の回答はノーだと思われる
>>316 Perl(とPCRE)の拡張表現だと思う。
pcreのmanpageかperldoc pelre辺り。
\Kみたいなのまでは知らなくてもいいと思うよ。代表的なのさえしっかりおさえておけば大抵なんとかなる。 回答者やるレベルになりたいなら全部知ってないと話にならないけど、ここには話にならない回答者しかいない。
鼻高々(笑)
>>316 ソフトウェア板のサクラエディタふぁんくらぶには
鬼雲やbregonig.dllの作者である
>>292 の高田さんがよく降臨してるんだけど、
正規表現エンジンが鬼雲になったbregonig.dll V3では
\Kが使えるようになったと去年ステマしに来てた
鬼雲?
正規表現は単独の記号や記号とセットの英字でメタ文字が構成されてるから、 ネットでググれないのが欠点だよね 検索キーワードに記号を受け付けてくれたり、 正規表現でパターンマッチングできる検索サイトはないものか
鬼蜘蛛の方がかっこいいのに…
「本人がステマしてた」とかネタでも頭悪そう。言ってる人が
自演がばれたとかじゃないの? そうでないとつじつまがあわん
ちゃんとリファレンスマニュアル読めよ
クモ嫌いだからやめて。
334 :
◆x0X2ba5fI. :2012/01/28(土) 05:47:46.96
>>311 5と4先に1つずつ始末するのは何故か試してなかった
thx
>>314 単純に「エレガントに一意にしたかっただけ」の話
最終的にそういうことで解決なのですまんが新たなゴミ質問はない
実際に使うシチュエーション
あるサブルーチンを6回回す sr(60);
受け取る引数は1コでそれぞれ10,20,30,40,50,60
そのうち1回はスペース無し確定なので考慮するのは残り5回
引数を元に生成した文字列(特定の文字列+後ろにスペースだけの組み合わせ)が
サブルーチン内で定義する連想配列のキーになる cat["-すべて"+id] = ...
ループ回して連想配列定義するのにそのキーを出来るだけエレガントに一意にしたかっただけ
実際には最終的に出力に影響はないしする必要のないことなので
隠してるとかいう次元の話でもなく良い手があればということで行末に?を付けた
>>333 なるほど、実在する物体はイメージがプラスとは限らないのね。
ネーミング時には気をつけます。
質問させてください。
>>3 の解説サイト内のページ:
ttp://funcchan.blog16.fc2.com/blog-entry-36.html において「A(?=B)(?=B)B」という正規表現を例に挙げて、
「先読みは何がすごいのかというと、同じ場所にある文字や文字列を複数回見ることが出来ることです!」
と書かれています。これはいったい、どのように「すごい」ことで、何の役に立つのでしょうか?
ちなみに、続けて「これとは別に、(?= ) にはもう1つの使い道があります」として、「AB」を「CB」に置換する表現の
例が載っています。こちらの方は普通に理解できるのですが、「これとは別にもう1つの使い道」と言うぐらいなので、
前者の方にもなにか使い道があるのだと思うのですが…。どんな使い道があるのか、理解できません。
よろしくお願いします。
すごいと思うかは人による。文学や芸術でも見方、評価を押しつけるのはよくない。 凄いとか、感動したとか、はおいといて動作の事実をしれば十分。
>>337 いや、そういうことを言いたいのではなくて・・・。
説明サイトに載っている「A(?=B)(?=B)B」という例は、説明のためだけの、実際には役に立たない例だと思うのですが、
では、「同じ場所にある文字や文字列を複数回見ることが出来る」という特徴の、実用的な使い道(実際に役に立つ例)とは
どのようなものかを知りたいのです。
私が知っている(?= )の使い方は、Aの後にBが来るようなAを探すというものですが、それはサイトで「これとは別のもう1つの
使い道」として説明されているほうに該当すると思います。では、そうではない使い道とは何なのだろうか?ということです。
>>338 なるほど! これは確かに、複数回見る場合の例に該当しますね。
こんな使い方もあるのですね。
勉強になりました。どうもありがとうございました。
自分がすごいとおもえる用途を教えてくれって事か。
それがないとできないことがあるという場面を想像すればいいだけなのにね。
ただ動作の事実さえ知っておけば必要になったときに使えるし、必要になるまではどうでもいいものなんだから 「凄いとか、感動したとか、はおいといて動作の事実をしれば十分。」 って言ってるんじゃないの。
A(?=.*1)(?=.*2) Aの後ろに1と2が存在するA。対象テキストで、2⇒1の順に出てきてもマッチする。 A(?=.*1.*2) 2⇒1の順に出てきたらマッチ出来ない。
345 :
336 :2012/01/29(日) 10:51:27.62
沢山のレスありがとうございます。 解説サイトを見て動作の事実はわかったのですが、それがなんの役に立つのか全く見当がつかなかったので、 質問させていただきました。 数学でも、公式だけを知れば、あとは大した例題をこなさなくても必要時には使いこなせるという人もいるかも しれませんが、私は頭悪いため、そうはいかないもので。 実際、これまでANDの検索をしたい時は「A.*B|B.*A」などとやって、面倒だなーと思ってたんですが、今後は スマートに検索できそうです。
ブログは大半がクズ。いいのもある。 しかし馬鹿に見分けるの困難だから、 定評のある本で勉強することが必要になる。 どんな馬鹿でも時給千円の働きはするのだから、 糞ブログで時間を無駄にするのは馬鹿げてる。
>>345 それがABCDEFGぐらいあると面倒だなーですまなくない?
>>345 そういう分からないとこがあったらどんどん聞いていいですよ。後でそのサイトを読む人の参考になりますし。
>>346 正規表現は敷居が高いから自分に合う本を探すのは大変でしょうね。
検索って地頭が良くないとダメだからな 自分で有効な検索ワードを考えられない人は金払って解決するのがいいと思う
350 :
デフォルトの名無しさん :2012/01/29(日) 19:42:55.72
よろしくお願いします。 ●正規表現の使用環境 さくらエディタの「タイプ別設定の正規表現キーワード」 ライブラリはデフォルトのbregoingを使用 ●検索か置換か? 検索 ●説明 ブロック型のコメントスタイルが2つしか使用できなく 3つ目を利用したいがどうしたらいいのか。 具体的にはC言語で /* から */ #if 0 から #endif にくわえ 、 #if 0 から #else に相当するものを追加したい。 正規表現キーワードを使えばうまくいきそう、というところまでは たどりついたが、どう書いていいのかよくわからない。 板違いならすいません。
353 :
350 :2012/01/30(月) 08:08:58.16
>>351 ,352
ありがとうございます。そちらで聞いてみます
よろしくお願いします。 ●正規表現の使用環境 JaneStyleのNGEx ●検索か置換か? よくわかりません ●説明 4行以上の書き込みすべてを対象としてNGにしたい
「改行が3回以上」で表現できないの?
datにマッチさせるんだっけ NGWordに正規(含む)で ^(.*<br>){3} こうか?
360 :
354 :2012/02/03(金) 00:06:54.59
>>359 無事にできました
ありがとうございました
361 :
デフォルトの名無しさん :2012/02/03(金) 03:17:53.42
●正規表現の使用環境 java ●検索か置換か? patternメソッドで置換 ●説明 2chの掲示板からコメント部分だけを抽出しました。URLやアンカは正規表現で削除できたのですがAAを削除するための正規表現がどうしても解りません。 全角の/やタブを多く含んでいるのは解っているのですが色々考えても解りませんでした。 AAを削除するスレッドでも質問したのですが良いアドバイスを貰えませんでした。何卒アドバイスを頂けないでしょうか?宜しくお願いします。
>>361 普段使わない文字が含まれてたら除去すればいいじゃん
そのつどAAに使われやすい文字(列)を手動で登録。
364 :
デフォルトの名無しさん :2012/02/03(金) 03:38:35.26
>>362 ()/%のような記号を一文字表す正規表現ってありますか?
日本語&カタカナ&漢字&英語以外の文字を表す正規表現をかなり調べましたが見つけることができませんでしたorz
365 :
デフォルトの名無しさん :2012/02/03(金) 03:41:45.92
>>363 ありがとうございます。完全に除去したいならそうするしかないですよね
()/%があるだけでAAと判定するのか。。 (%)/ まぁ、ウルトラマンといえばそうだが。
お願いします ●正規表現の使用環境 PHP5 ●検索か置換か? 置換 ●説明 0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙ ゚\「」,.()-/ preg_replace関数を使い上記文字以外を全て削除したい ●対象データ 0ガ9ギAグアaイbウcエdオ ●希望する結果 09Aアイウエオ
[^0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙ ゚\\「」,.()\-\/]
>>369 $text = '0ガ9ギAグアaイbウcエdオ';
$text = preg_replace('/[^0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙゚\\「」,.()\-\/]/' ,'' ,$text);
echo $text;
このようにしてみましたが何も削除されずそのまま表示されます><
>>371 結果
0ガ9ギAグアイウエオ
となりました。
なぜガギグが残るのでしょうか?
失礼・・・ 半角のガギグは1文字ではなく別々の文字なんですね 自己解決しました
とくに目的はないんですが、 気になることがあったので教えてください。 ●3文字か4文字のaにできる限りマッチする正規表現 (aaa|aaaa)* ●文字列 9文字のa にマッチさせる aaaaaaaaa Java6標準の正規表現と、秀丸から呼び出したJRE32.dllでは、 9文字マッチ(aaa aaa aaa)するんですが、 秀丸のHMJRE32.dllでは、8文字(aaaa aaaa)しかマッチしません。 ほかの正規表現エンジンでは、どのような動作が一般的なんでしょう? 詳しい方いらっしゃいましたら教えてください。
スクリプト言語などで使われているのは 大部分の実装では縦方向探索だから 最長・最短の正確な照合はできない。 縦に探索して枝刈りするからね。 lex/egrepなら方式が違うから確実に最長一致するんだけどね。
あ、んで上の例の場合は正解が複数あるケースだから どれを返すかはプログラムの作り方で偶然に決まりますん。
>>375 hmjre32.dllの動作はとっても特殊だよ
9文字マッチが正解
>>375 じゃあこれで
a{6,}|a{3,4}|a{6,}
真ん中を優先する実装があった場合はしらんw
>>380 突っ込み所が多すぎ。
とりあえず、a{11} にマッチするから結果が変わる。
最終的に全長が一番長いパターンが正解 同じ長さで複数の正解がある場合は もうプログラムの作り方によって偶然決まる。 だから正確さを求める場合は パターンを書く人が意識して気をつけるしかない。
>>380 「3a+4b (a,b∈N∪{0})」の値域が「0,3,4および6以上」だから確かに結果は異なるようだが、
「空文字列にマッチしないから」なら兎も角、「a{11}にマッチするから」は流石に阿呆すぎ
(?> ) を使えばいいだけでないの。
375です。ありがとうございます。
自分の方でも、いくつかのスクリプト言語で試してみました。
>>375 の(aaa|aaaa)*ではなく、
(aaaa|aaa)+ として、あえて先に4文字のaaaaを書くようにしました。
Java6、JRE32.dll では9文字マッチしました。
ActivePerl5.5 Python3 Ruby1.9 Firefox7 chrome16 IE8 は、
8文字マッチでした。
最終的に最長のマッチが主流だと思い込んでいたのですが、
失敗さえしなければ、最長のマッチとは限らない、という方が主流っぽいですね。
エンジンの種類によって変わるんじゃないか バックトラックNFA、POSIX NFA、DFA
387 :
381 :2012/02/05(日) 07:00:11.53
>>383 > 「空文字列にマッチしないから」なら兎も角、「a{11}にマッチするから」は流石に阿呆すぎ
なぜ阿呆?
面倒だから全部は指摘しなかったけどさ。
「真ん中が優先される」とか「a{6,}を二重に列挙してる」とか。
389 :
381 :2012/02/05(日) 16:09:19.31
a11文字だった場合は11文字にマッチさせたいのが元だとおもうんだが、 11文字にマッチするようになっちゃうからアウトっていってるように見えたから
greedyとlongestの違いって奴だな。greedyを最長って訳してることが多いので 俺も憶えたてのころはしばらく騙されてたわ。
>>391 hmjre.dllはそのどちらでもないけどな。
|に関してはlongest的な動作をして、
繰り返しに関してはgreedy的な動作をしている(しかもバックトラックが不十分)
393 :
381 :2012/02/05(日) 20:34:53.75
>>390 > 11文字にマッチするようになっちゃうからアウトっていってるように見えたから
(aaa|aaaa)* は a{11} にマッチしないのだからその認識で合ってるよ。
なぜそういう仕様なのかは俺が知るわけがない。
394 :
381 :2012/02/05(日) 20:38:29.32
ごめん。a{11} にマッチするな。忘れてくれ…。
>>394 いや、^(aaa|aaaa)*$ のように前後に ^$ 付けたりして11文字にマッチするように強制すればマッチするけど、
そうじゃない場合は11文字にマッチするとは限らないのでは。少なくともPerlとかRubyはそのようだし。
(aaa|aaaa)*で表現される文字列の集合には11文字も含まれるから、マッチする
正規表現でマッチする/しないというのは「ある文字列がパターンで表される文字列の集合に含まれるかどうか」でしょ
>>395 の実装の話は「マッチする部分を探す」という処理で、解が複数あるときにどれを選択するかというのが
上で挙がっているgreedyとかlongestとかの話
●正規表現の使用環境 bat ●検索か置換か? 検索 ●説明 先頭に[があるかどうかを検索したい 例えば set a="[色々な文字列" echo %a%|findstr /r /c:"^.[." 1>nul これでダメだったので質問させて頂きました ●対象データ "[aaa" "(bbb) [ccc]" "(ddd) eee [" "[fff] [ggg]" ●希望する結果 "[aaa" "[fff] [ggg]" よろしくおねがいします
^\[
ありがとうございます。^.\[.で出来ました
>>394 ならよかった。なんか見落としてたのかとおもてた
C#スレから誘導されてきました 正規表現で ${aaa} に一致して、 ${aaa } に一致させないようなパターンはどうやって書けばいいのでしょうか? \$\{([^}+)]\} だと、2つ目のパターンでaaa\r\nを取得してしまいます 宜しくお願いします
中身 .*?
できました! ありがとうございました!
."*?"は
>>401 の条件であれば間違っていないです。
ただ、↓がより正確な書き方かな。
\$
\{
[^
\{\}\r\n
]+
\}
."*?" だと、「${aaa}bbbにマッチさせたい」というように、後ろに追加条件が加わると誤作動の
原因になります。(${aaa}改行${ccc}bbbにマッチしてしまう)
//エスケープは分かりやすいように付けてます。
.*?} は非欲張りだから最初の } までしか食べないし ドットは改行に(通常)マッチしないよ
\$\{([^}+)]\}って括弧の対応おかしくね?
>>404 改行オプションやら仕様変更やらに左右されない正規表現ってことかー、そういう考え方もあるんだ、ふむふむ。
408 :
デフォルトの名無しさん :2012/02/08(水) 13:54:48.43
正規表現について詳しい方お答えお願いします。 下の<img から /span>までのソースを正規表現でマッチさせて下のプログラムをうまく動かしたいのですが、 $patternの中にどのような正規表現を書けば良いでしょうか? 正規表現にあまり詳しくないなりに試行錯誤したのですがどうにも動きません。 $matches[2]に2.22を $matches[3]に3.33%を代入したいのですが、 $matches2[1]にdown_rを どなたか分る方は居られませんでしょうか?お答えお願い致します。 ※できるだけ簡潔なのがありがたいです。 ※ソース自体をいじったりせず$patternにどんな正規表現をを代入するか、で教えていただきたいです(あまり詳しくないんでそうしないと分らないと思うので) ※heightやstyleやid等、一定じゃない物はどんな数値に変わっても対応できるようにしたいです。 改行の制限に引っかかってしまったのでソースは下に書き込みます。
409 :
デフォルトの名無しさん :2012/02/08(水) 13:55:35.36
408の続き
$getHtml = "<img width="11" height="11" style="margin-right:11px;" border="1" src="
http://aa.bb.cc/dd/ee/ff/gg/hh/down_r.gif " alt="ii"> 2.22</span><span id="jj">(3.33%)</span>";
$pattern = "";
if(preg_match($pattern, $getHtml, $matches))
{
$pattern2 = "/<img.*?(down_r|down_g|up_r|up_g)\.gif/s";
if(preg_match($pattern2, $matches[1], $matches2))
{
}
if($matches2[1] == "down_r")
{
$matches2[1] = "down_g";
}
elseif($matches2[1] == "up_g")
{
$matches2[1] = "up_r";
}
$tmpString = $matches[2]."(".$matches[3].")";
imageSave($values,$matches2[1],$tmpString,$flag5min);
}
なんちゃら知恵袋の回答を待ったほうがいいとおもうよ 答えてくれてる人がかわいそう
そんなの、遅い方が悪いだろ・・・
412 :
デフォルトの名無しさん :2012/02/08(水) 15:23:49.04
悪いとも思ったのですが、ちょっと急ぎなので、、、
413 :
デフォルトの名無しさん :2012/02/08(水) 15:26:52.32
こんな感じか? .+?>(.+?)<.*?span.*?>(.+?)</span>
そうだぞ、
>>412 さんは急ぎなんだから遅い奴なんか待ってらんねーんだよ
415 :
デフォルトの名無しさん :2012/02/08(水) 15:32:13.91
急ぎとかアンタ以外の人間にとってはどうでもいいことだ ソースも腐ってるし 業務ですぐ必要だというなら金出してやってもらえばいいことだしな 俺ならタグ解析させるけどな ソースがゴミに埋もれてるからできないというなら処理する前に掃除すればいいんだよ
業者っぽいなー、正規表現使わなくても出来ることだし時間無いならそうすればいいのに。 仕事をネットに下請けさせんなし。正規表現使わなくても出来ることなんで教える必要なしと判断した。
お前らマルチはスルーするって知ってる? 答えてもらえりゃ何でもいい、腐った奴らなんだから答えなくていいんだよ
>>415 なんか嫌な事でもあったのか?
生きてて嬉しいことなんて正規表現が一発で通ったときくらいだよな
421 :
412 :2012/02/08(水) 16:21:07.70
すいません こんなに皆さんの気分を害するとは思いませんでした
向こうの返事よりこっちの質問のほうが早いっていうのはマナー的に残念。礼儀は大事だよ。
423 :
412 :2012/02/08(水) 16:45:31.36
424 :
412 :2012/02/08(水) 16:49:48.81
途中で切れてしまいました。
すいません。
知り合いから(といっても相談できるような仲じゃないのですが)
423にあるような指摘を頂いたので
一応書かせていただきます。
もし気が向いた方がいらっしゃたら御教授願います。
$getHtml = "<span class="aaa"><span id="bbb"><img width="11" height="11" style="margin-right:11px;" border="1" src="
http://aa.bb.cc/dd/ee/ff/gg/hh/down_r.gif " alt="ii"> 2.22</span><span id="jj">(3.33%)</span>";
御教示
426 :
デフォルトの名無しさん :2012/02/08(水) 17:17:03.85
あれ、教授も合ってないっけ?
427 :
デフォルトの名無しさん :2012/02/08(水) 17:18:54.53
$pattern = "/<span class=\".*?\"><span id=\".*?\">(.*?)>(.*?)</span><span id=\".*?\">\((.*?)\)/s"; ・・・じゃ駄目か、・・・駄目だろうなー
>>424 <span id="bbb"><img\s.*(?:\s|")src=".*((?:down|up)_[gr])\.gif".*>\s*((?:[1-9]\d*|0)(?:\.\d+)?)<\/span><span id="jj">\(((?:[1-9]\d*|0)(?:\.\d+)?%)\)<\/span>
>>426 あってる。ただしその場合、
「より親切丁寧にお母さんみたく優しく教えれ」
って意味になる
430 :
デフォルトの名無しさん :2012/02/08(水) 17:34:18.98
あはは
>>428 これだと
matches[1]の部分が間違ってないか?
もっと簡潔に書けそうだが
433 :
デフォルトの名無しさん :2012/02/08(水) 18:22:20.19
質問です。 ダブルクォーテーション(")に囲まれた文字列を検索する時 \".*?\"で検索できますが、これだと改行が除かれます。 文字列の中に改行を含める場合は、どのように記述すれば良いのでしょうか?
>>433 ドットに改行を含めるオプション(使用言語ごとに異なる)を使うのがお手軽
>>425-426 師弟がみっちり学問を教える時は「ご教授」も使うらしいが、
一般的な「教えて下さい」の時は「ご教示」を使うのが一般的。
日本語変換がイマイチというより、元の意味を知らずに使ってる人多数。
まるで昔の「独壇場」(正しくは独擅場)
独擅場(どくせんじょう)
441 :
デフォルトの名無しさん :2012/02/09(木) 05:35:29.17
マルチのゴミクズが湧いてたのか お前が食いっぱぐれてのたれ死んでも誰も困らないから 急ぎだとかそういう理由でマルチしてんじゃねぇよ池沼
XMLみたいなネストした構造って、 真面目にやろうとすると正規表現じゃ書けないよね。 と思ってたんだが、ちょっとググったら今はできるんだな 鬼車とか一部のエンジン限定だが。
443 :
デフォルトの名無しさん :2012/02/09(木) 08:29:51.51
何で環境限定してるんだ? 頭悪そう。
マルチの正規表現何故かうまくいかん 意外と難しいのかこれ? それともなんか勘違いしちゃってるかなー
まったりいこうぜ
448 :
433 :2012/02/09(木) 14:17:58.36
>>435 ,436
レスありがとうございます。
ブランクも検索対象に含めますので、
>>436 ではできないのでは?
449 :
445 :2012/02/09(木) 14:44:54.26
できねー!! 後は任せた!
>>427 </span>を<\/span>にしないと
とりあえず駄目だろ
>>449 出来るやつ、今、居ないんじゃね?
俺はわからん
マルチポストはスルーという鉄の掟に従ってるだけ。
頭固いなー
>>423 は二重引用符エスケープしてないけどいいのかな
やべえ、思いのほか全然できねえ イライラしてきた
456 :
デフォルトの名無しさん :2012/02/09(木) 18:36:29.49
Twitterにでも書いてろゴミ
正規表現を覚えればいいだけなのになんで人に聞こうとするんだろう。学習能力無いのかな。
●正規表現の使用環境 wxWidets (wxRegEx) ●検索か置換か? 検索 ●説明 一行の中に丸括弧で閉じられた文字列を検索したい。 丸括弧が出てくる位置や数は不定です ●対象データ (2012年2月)北海道で撮影。(raw)で保存。猫と一緒(雄) ●希望する結果 (2012年2月) (raw) (雄) (\\(.*?\\))で検索すると、"(2012年2月)"だけ検索されます。 (\\(.*?\\))(?:.*)(\\(.*?\\))(?:.*)(\\(.*?\\))で検索すると(2012年2月)(raw)(雄)が検索されます。 ただ括弧の位置が変わった場合には、この正規表現では検索にかからなくなります。 サクラテキストエディタ等の正規表現で検索すると、(\\(.*?\\)) 文章内にいくつ括弧文字列があっても すべて検索されています。 正規表現でどのように書けばいいのか、それとも、プログラム上で検索しているのかわかりません。 どのように実現しているかまったくわかりません。 考え方などをおしえてくださいませ。
>>458 よく似た質問をwxWidgetsのスレで見たばかりの気がするが?
ループで回せ。
460 :
デフォルトの名無しさん :2012/02/09(木) 21:28:51.69
ループで回して掲示板のURL一覧から一行ずつ書き込んでいったのがこの結果
●正規表現の使用環境 linux 2.6系 grep / Scientific Linux 6.1 ●検索か置換か? 検索 ●説明 IPアドレス(xxx.xxx.xxx.xxx IPv4)にヒットさせたい ●対象データ 192.168.0.1 255.255.255.0 999.999.999.999(注:IPアドレスとして許容されていない) ●試した正規表現 "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" 今回の検索では目視で判別できましたが、 999.999.999.999←これにヒットしてしまう等、致命的な部分があります。 ご教示いただければ幸いです。
それって正規表現だけでは無理だろ。 割り当てを正確に知る必要がある。 追加で、使う時点で生存しているのか確認するルーチンなども。
最大3桁で三桁あるときの先頭を1,2しか許容しないとかなら [12]?[0-9]?[0-9] で検索できるけど、199はいいけど299は許容しないとかまでいくとめんどくさくなるね。
これが無効なIPだという情報はどこから入手した?どれを有効と判定するかで式が変わる。 999.999.999.999
一桁目と次の.だけ書く。後は最初の1を0にして適当につないで。 [1-9]|¥([1-9][0-9]¥)|¥(1[0-9][0-9]¥)|¥(2[0-4][0-9]¥)|¥(25[0-6]¥)¥. hostmaskも含めるなら最初は1じゃなくて0。
ある国や地域に割り当てられたとしても、それが実際に割り当てられてるかは判らない。
>>464 IPv4のアドレスは32ビットを8ビットごとに区切ったものだからそりゃ無効だ。
スクリプトと組み合わせた方が早いよ
473 :
461 :2012/02/09(木) 23:11:29.53
単純に 0.0.0.0 〜 255.255.255.255 の範囲であればIPv4アドレスとして有効と思っていました。 linuxなんで、grep結果を出力したテキストを整形するだけでも十分実用に耐えるかもしれません。 行数が多い場合は、やはりスクリプトの方が良さそうですね。 今回はこれでcloseにさせて下さい。 ご意見、ありがとうございました。
すでに0.0.0.0 〜 255.255.255.255が全て有効だったら 新規の企業や大学はアドレス取得できなくなってるだろ。 枯渇は問題になってるが、満杯でもない。
別に規格上有効かどうかがわかればいいんじゃ……。
>>469 予約済みのIPアドレスは、IPアドレスの形式として有効じゃないって言いたいのか?
>>461 って単に
> IPアドレス(xxx.xxx.xxx.xxx IPv4)にヒットさせたい
ってだけだよな。
んーと、getaddrinfoは IPアドレスの数値表記とホスト名両方OKだからさ 正規表現使わずに直接アドレス引けばいいんでないの。 そんでエラー返ればアドレス入力エラー。
(?<1>[012]?[0-5]?[0-5])(?:(?<1>[.][012]?[0-5]?[0-5])){3} こんな感じではだめでしょうか?
>>459 質問したの私です。
最短マッチの場合、ループ処理で検索するのですね。
ありがとうございました。
>>445 鬼車ならjane bbsのreplacestrスレで聞くと正規表現の猛者達が答えてくれる。レベルはんぱねぇよ。
マルチのは正規表現使わなくても出来るって言われてんのになんでまだ正規表現でやろうとしてんの。
java用の高速な正規表現ライブラリってありますか? java.util.regexは遅いし google RE2を移植してみたもののまるで使いものになりません。
すみません鬼車はネイティブをコールしているので除外でpure javaでお願いします。
486 :
433 :2012/02/10(金) 08:41:06.95
>>435 >>ドットに改行を含めるオプション(使用言語ごとに異なる)を使うのがお手軽
調べてみたのですが分かりません。
Objective-cで、ドットに改行を含めるオプションは、どのように指定すれば良いのでしょうか?
(「"」で囲まれた改行、スペースを含む文字列を検索する場合)
487 :
461 :2012/02/10(金) 10:26:45.56
>>478 まったくヒットしなくなりました。出発点よりデグレーションしてます!
488 :
デフォルトの名無しさん :2012/02/10(金) 11:12:59.04
自分で調べるやつはこんなとこに質問しないぞ
[0-5]はどうなのよ? 192.168.0.1 がアウトじゃん
(?:(?<1>[2]?[0-5]?[0-5])|(?<1>[01]?[0-9]?[0-9]))(?:(?<1>[.]([2]?[0-5]?[0-5])|(?<1>[.][01]?[0-9]?[0-9]))){3} こんなかんじ?
>>465 でほぼ答え出てるじゃん。
\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.
回答者の能力的にあそこから答えを導きだすのは難しかったのだろう。 その前後のレスにもひどいものがあるが。
ここには正規表現極めたつもりになってる素人がいるからなw
>>494 こういう正規表現一般についての質問ですが、
ターゲットを捕らえることができることは確かめられますが、それ以外のものも捕捉されて
しまうのではないか、という不安はどのように解消すればよいのでしょうか。
>>497 悪態はつくが質問には答えない奴とかな
あと自治気取ってる奴もか
お前、答えられないだけだろ、と
正規表現で足し算はできないでしょうか? PHPのソースなんですが array( 'start' => 10.000, 'end' => 10.166 ), array( 'start' => 11.166, 'end' => 11.414 ), array( 'start' => 12.414, 'end' => 14.559 ), などと並んでる部分があり、これらの数値全部に1を足したいのですが
>>494 (?<1>...)をいっぱい並べて何をやりたいんだ?
キャプチャをサポートしたエンジンは遷移図の通りには動かない。 その通りに動くのはegrepとかごく一部のみ。
>>502 何をやりたいのかさっぱり分からん。
ソースコードの変換がやりたいのかな?
awkとかLL系の言語使った方がいいんじゃない?
UNIX上ならならシェルスクリプトスレに来い。
>>505 自分で作るんだから意図した通りの動作になるよ。なんでそんなことも知らない人が横から口出すの?
>>506 ごめん、わからなかった?
この例だと、これを
array( 'start' => 10.000, 'end' => 10.166 ),
array( 'start' => 11.166, 'end' => 11.414 ),
array( 'start' => 12.414, 'end' => 14.559 ),
...
こうしたい
array( 'start' => 11.000, 'end' => 11.166 ),
array( 'start' => 12.166, 'end' => 12.414 ),
array( 'start' => 13.414, 'end' => 15.559 ),
...
数値は色々なので、単純な置換じゃなく、任意の演算(ここでは1を足す、これは固定)をしたい
うーん、答えが来ない... これでもちょっとレベル高すぎたかも?
510 :
デフォルトの名無しさん :2012/02/10(金) 18:19:54.24
試しにTwitterで質問レスのURL貼って教えてって流したら20分で回答きた やっぱりTwitterは早い 2chは遅いから情弱しか使ってないだろうし 情弱が高度情報に回答できないのは当然
ruby -ne'print $_.gsub(/\d+\.\d+/){|e|e.to_f+1}' < SRC array( 'start' => 11.0, 'end' => 11.166 ), array( 'start' => 12.166, 'end' => 12.414 ), array( 'start' => 13.414, 'end' => 15.559 ),
キチガイがわいたか
結果をはりそこねた Twitterってそんないいものなのか。始めようかな
まあでも2chみたいに欲しい情報にまつわる話題を扱うスレにフラっと寄って回答を待つようなことはできないけどね。 欲しい情報を手早く得られる環境の構築・維持に手間がかかる。
515 :
デフォルトの名無しさん :2012/02/10(金) 18:35:39.46
俺もTwitterやってるけど、始めてすぐには回答なんか全く来なかった。 あれってフォロー・フォロワー増えるまで結構時間が必要。(1か月2か月とか) ただそれがある程度のラインを超えると便利になる。 だから1度きりの質問なんかだと2chのほうが回答もらえる率は高いけど 今後しばらくプログラミングやって情報交換が必要ならTwitter推奨。 基地害はブロックできるし。
ツイッターは情弱や馬鹿には不向き
馬鹿や情弱には不向きだが利用者の大半は馬鹿と情弱
518 :
デフォルトの名無しさん :2012/02/10(金) 21:42:58.05
519 :
デフォルトの名無しさん :2012/02/11(土) 00:36:51.48
さすがPHPer
521 :
デフォルトの名無しさん :2012/02/11(土) 21:26:16.26
性器表現
■□■□■□ □■□■□■ ■□■□■□ □■□■□■ ■□■□■□ □■□■□■
嵐の番組ってCMが生理用品ばっかでワロス
524 :
デフォルトの名無しさん :2012/02/12(日) 00:45:38.90
ああ、なるほどなw 言われてみれば生理用品CMに一番適した番組だなw
/[^a-z]/は半角英字以外という意味ですが、 /^[a-z]/ってどんな意味なんですか?
>>525 行頭にa,b,...y,zがある行にヒット。
カッコ外の ^ は行頭の意味。
[^words]はwordsという文字の否定。
さらっと嘘教えるなw
530 :
デフォルトの名無しさん :2012/02/12(日) 03:07:42.54
>>1 すら読んでないゴミの
>>525 にまともに答える必要なんかないんだからいいだろ嘘でも
>>529 誤解するなんてばかだなぁと思うならまだしも、
どこが誤解されたのか理解できないのはまずいよ
533 :
デフォルトの名無しさん :2012/02/12(日) 07:20:37.51
/aac^defg/
/[a-z]^/の^でも行頭という意味になるのか 文字クラスの説明なのにのwordsという単語を角カッコの中に含めるセンス a,b,...y,zという表記が唐突に出現する(a,b,...,y,zならともかく) さらっと嘘というツッコミが入らなかったらもうこのスレ開かないところだった
>>534 ああ、まあ誤解を生む表現でごめんね…
そこまで言うならきっちり回答書いてよ('A`)
>>535 こちらもきつく書きすぎた。ごめん
とりあえずこのスレからは卒業するわ
537 :
デフォルトの名無しさん :2012/02/12(日) 11:15:37.62
>>529 >>526 >カッコ外の ^ は行頭の意味。
>[^words]はwordsという文字の否定。
w、o、r、d、sという1文字ずつの否定と書かないと
質問者は誤解するでしょ
(上記の正規表現は、Edwords以外にもsordやwやoやrやdやs等にもマッチしない)
ごく希に[^(words)]で2文字以上の文字列の否定ができる正規表現実装もあるらしいけど、
Perl準拠ではない極めて例外的な実装
perl準拠じゃないと例外かよw
539 :
デフォルトの名無しさん :2012/02/12(日) 11:42:33.23
PCRE以外はカス
regux「君たち、
>>537 >ごく希に[^(words)]で2文字以上の文字列の否定ができる正規表現実装もあるらしいけど、
そんな変態的なの実在するのか?
542 :
デフォルトの名無しさん :2012/02/12(日) 12:08:26.69
環境も書いてないのにレスできるのがすごいわ
>>537 嘘はいいすぎだろ、わかりづらいだけ
しかも、あの時点で嘘の内容を書かなかったら嘘なのか本当なのか判断できなくて迷う奴が必ず出てくる
544 :
デフォルトの名無しさん :2012/02/12(日) 13:25:34.35
545 :
537 :2012/02/12(日) 13:30:03.00
同調しただけで私は
>>528 ではありません
にしてもプログラム板にIDがないのはなぜでしょう
自演で盛り上げる意味のない板だし
無責任な投稿が増えるだけではないかと
546 :
デフォルトの名無しさん :2012/02/12(日) 14:11:57.84
特定IDに粘着する池沼がいるからだろ 一度粘着されると24時過ぎるまでつきまとわれる
こんなの初心者用のサイト読んでれば分かってるはずの内容。それを人に聞くことがそもそも間違ってる。 そんな人の相手はしなくていいよ。嘘書くのはまずいと思うけど。
549 :
デフォルトの名無しさん :2012/02/12(日) 15:46:51.85
嘘書くのもありだと思うよ。つかむしろ推奨。 ネットで他人に聞けば何でも解決とか思ってる情報乞食のゴミは一回痛い目をみるべき。
よし、情報乞食にウソを教えて痛い目にあわせるサイトをつくろう
551 :
デフォルトの名無しさん :2012/02/13(月) 15:30:36.27
>>550 それもありだと思うよ。最近は関連書籍の1冊も買わずにネットで十分とか言うゴミがいるからな。
情報は何でもタダで手に入るのが当たり前と思ってる貧乏人は一度痛い目をみるべき。
552 :
デフォルトの名無しさん :2012/02/13(月) 15:32:11.00
>>550 すぐにはバレないけど後々効いてくるような嘘を書くんだぞ。
>>550 サイト読んで学習しようと思うような人はここにバカな質問したりしない。
554 :
486 :2012/02/14(火) 10:37:31.73
555 :
デフォルトの名無しさん :2012/02/15(水) 12:57:50.64
性器表現
GUY出
性器をGUYが出してるのか
558 :
hidi and peter :2012/02/16(木) 23:00:17.96
(?![BCAA\.md]).*.mdとすると除外されるが これって、たまたまなので気持ち悪いような気がする [BCA\.md]でも同じ意味だしな ●正規表現の使用環境 PCRE (a.k.a PHP など 実際はApache) ●検索か置換か? 検索 ●説明 特定のファイル名を除外する正規表現を書きたい(とりあえずは1つでいい) ●対象データ ABCA.md BCAA.md CABA.md ●希望する結果 ABCA.md CABA.md
人に頼む書き方じゃねえな、スルー。
(?!BCAA)[A−Z]{4}¥.md
全角きんもーっ☆
> 559 知らなかったら、別に書き込まなくてもいいんだぜ。 > 560 ありがとう。'(?!sudo)\w{4}\.md' で、もうちょい便利に使えた。 pcretestで色々と試すと楽しいな。
●正規表現の使用環境 PHP5.3 ●検索か置換か? 置換 ●説明 ページ内にある<h2>〜<h6>に対して内側に<span>を入れたいです。 hタグににclassがある場合なども想定されますがそれは引き継ぎたいです。 何卒ご教授お願いいたします。 ●対象データ <h2>あああああ</h2> <h2 class="hoge">あああああ</h2> <h2><span>あああああ</span></h2> 以下h6まで同様 <h6>あああああ</h6> <h6 class="hoge">あああああ</h6> <h6><span>あああああ</span></h6> ●希望する結果 <h2><span>あああああ</span></h2> <h2 class="hoge"><span>あああああ</span></h2> <h2><span>あああああ</span></h2> 以下h6まで同様 <h6><span>あああああ</span></h6> <h6 class="hoge"><span>あああああ</span></h6> <h6><span>あああああ</span></h6>
(<h[2-6][^>]*>)(?!<span>)(.*)(?<!</span>)(</h[2-6][^>]*>) \1<span>\2</span>\3
>>563 classがある場合「など」もって何よ?
質問する側が仕様をあいまいにするとかありえない
最近質問者につっかかる奴が多いな 同一人物か?
なーいふみたいにとがあてわ さーわるものみなきずつけたー
568 :
デフォルトの名無しさん :2012/02/18(土) 01:09:14.81
つっかかる奴が多いんじゃなくて
>>563 みたいなゴミが増えたんだろ
曖昧な仕様を提示するとかマジ知能障害
ゴミが増えたらゴミを片付ける奴が増えるのが自然
つっかかる奴を減らしたかったらまず
>>563 みたいな人間のクズを減らせ
答えてるやつがいるからいいじゃん。なんとかとハサミは使いよう。
>>564 様
ありがとうございました。
素人丸出しの質問で申し訳ありませんでした。
“など”と書きましたのはidやstyle等のclass以外の属性も考えられると思ったため、
つい曖昧な書き方になってしまいました。
571 :
563 :2012/02/18(土) 01:30:45.70
メール欄に番号いれるとか、、、 知障と言われても仕方ない。 スレ汚し失礼しました。
いま秀丸エディタで正規表現使って あれこれ修正しているけど おすすめの、正規表現を搭載できるエディタってある? 秀丸よりも優れた奴 Eclipseはまた別。すでに使ってるので
正規表現ライブラリを変更できるやつか。 さくらは。
linuxでsed。
鬼車が使えるエディタがあれば最強だろうけど知らないな
1. 概要
Tatsuo Baba氏による正規表現ライブラリである Bregexp.dll 互換の正規表現ライブラリです。Windows アプリで Perl 互換の正規表現が使えるようになります。
正規表現エンジンとして、鬼車 (Oniguruma) を改良した鬼雲 (Onigmo, Oniguruma-mod) を採用することにより、オリジナルの Bregexp.dll よりも高度な正規表現を使用できるようになっています。
2. 動作環境
Windows 98 / 2000 / XP / Vista (x86/x64) / 7 (x86/x64)
(Windows 95/ME/NT4 は動作未確認)
bregonig.dll または Bregexp.dll に対応したアプリケーション
作者が動作を確認したアプリケーションは以下の通りです。ただし、動作を保証するものではありません。
K2Editor r.1.5.7 Build 519 (k2regexp.dll)
JmEditor2 Version 2.0.25
サクラエディタ Ver. 1.6.4.0
Spam Mail Killer Ver.2.28
INCM version 1.23c
ttPage-R Ver.0.98r28
秀丸エディタ Ver7.00 + BRegIf.DLL v0,0,2,2
Speeeeed Ver1.43
http://homepage3.nifty.com/k-takata/mysoft/bregonig.html
秀丸のhmjre.dllで全角スペースをサロゲートペアで検索したいのですがどう書くのでしょうか?
>>579 全角スペースのUnicodeコードポイントは
U+3000だからサロゲートペアじゃないよ
秀丸の正規表現でx0aとか\uxxxxみたいな漢字で全角スペースを書く場合は どう書けばよいのでしょうか?
>>563 いまさらだけど。
h2 -> h2><span
って置き換えればよかったんじゃ
>>582 >hタグににclassがある場合なども想定されますがそれは引き継ぎたいです。
>>581 秀丸はライセンス持ってないから試せないけど、
\x8140
\x{8140}
\x81\40
\u3000
のどれかでマッチしませんか?
585 :
486 :2012/02/18(土) 22:43:49.73
>>554 それで上手く行きましたでしょうか?
もしかしたら正規表現よりもC言語やobjectiv-cの言語仕様が優先されて
ダブルクォートをエスケープするか
ダブルクォートを\x22のような16進コード指定すべきだったかもと
今更ながらに気になってます
>>583 ああ、引き継ぎたいってそっちだったのか。てっきり挿入するspanに引き継ぐのかと勘違いしてた。
例も見ずにすまんかった。
>>584 \u{3000}で出来ました!ありがとうございます
最後にこの全角スペースが3000っていう数字になる事はどうやって調べられますか?
>>587 >\u{3000}で出来ました
本当に出来たのか?
この記法は文字クラス内限定のはずだが...
592 :
584 :2012/02/19(日) 00:14:44.44
>>592 多分、581はshift-jisのコード表記はしたくないんじゃないの。
hmjre.dllだと同じ文字を表していても意味が異なるよ。
ex
[\u{3000}-\u{3005]}] //unicode順の範囲指定[ -々]
[\x81\x40-\x81\x58] //shift-jis順の範囲指定[ -々]
おっと、]がひとつ余分だった
●正規表現の使用環境 C# ●検索か置換か? 置換 ●説明 りんご=20 以外を削除したい ●対象データ みかん10 りんご20 バナナ30 いちご40 めろん20 りんご20 ●希望する結果 りんご20 りんご20 よろしくお願いします
こちらこそよろしくお願いします
.*(りんご20).* \1
それ複数に対応できてない
複数文字列の否定は(?!りんご20)みたいな否定先読みが
常套手段だけど、今回みたいな否定箇所以外を全置換には対処できないね
>>537 のいう文字クラス内での否定文字のグルーピングが
C#(.net framework)の正規表現でも使えれば簡単なんだけどね
>>595 perlの正規表現ならワード境界の¥b使って
s/¥b(?!りんご20)¥S+[^¥S¥n]*//g
でいけるけどね。C#はわからん。
>>595 Regex.Matchesメソッドを1行ずつforeachで回して
マッチした単語を1行毎に連結していけば
とりあえず結果は同じになるんじゃないかと
・・・そういう妥協はだめ?
>>595 これ "りんご=20" と改行以外を削除だよね。
1行辺りの "りんご=20" の数を数えて "りんご=20" をn個並べる処理をforeachすればいいんじゃない?
正直一番簡単なのは 1:りんご20を他で使ってない文字か記号に置換 2:その文字以外全部空文字に置換 3:その文字をりんご20に置換 だと思うよ なんでも無理に一回で済ますのがいいことなわけじゃないしさ
そもそも、 あおりんご20 の場合はどうなるのだ。
* おおっと *
問い合せフォームから来たメールアドレスを正規表現を用いて抽出したいのですが
秀丸メールを使っておりメール全文をテキスト化したものの中に以下の文章が含まれています
▼メールアドレス
[email protected] ▼メールアドレスという文字列の下にある行だけを検索することは可能でしょうか?
メールアドレスにマッチする正規表現を使用するとヘッダー内のよくわからないアドレスまで抽出されてしまい
とても面倒くさいのでどうにか文章の下にある行のみを抽出という手段を取りたいのです
どうか解決策をご教授ください
(?<=^▼メールアドレス$\n)^.*$
>>607 レスありがとうございます
エディタは秀丸エディタを使用していまして
grebで教えて頂いた正規表現を入力すると
HmJre.dllの正規表現で前方一致/不一致"(?<!xxx)","(?<=xxx)"では改行文字を使うことが出来ません。
というエラーが出て思うように動作しませんでした・・・
(?<=^▼メールアドレス)$\n^.*$ 改行も引っかかっちゃうけど検索するだけならいいかな
>>609 レスありがとうございます
あとで取り除くので改行も全然引っかかっていいのですが
(?<=^▼メールアドレス)$\n^.*$
で検索するとなにも検索に引っかかりませんでした
環境は
Win7 64bit
秀丸エディタ64 v8.13 Beta7
HMJRE.DLL v3.41
です
ああああああああああああああ
ああああああああああああああ
▼メールアドレス
[email protected] いいいいいいいいいいいいいい
いいいいいいいいいいいいいい
元となる文章はこんな感じです
よろしくお願いします
正規表現使うんなら秀丸はないわ。
秀丸は環境ないからわからん 詳しい人にまかせた
614 :
デフォルトの名無しさん :2012/02/29(水) 00:15:31.04
615 :
デフォルトの名無しさん :2012/02/29(水) 00:16:23.90
616 :
デフォルトの名無しさん :2012/02/29(水) 00:18:13.93
>>610 ん、バージョン書いてあったのか…って秀丸エディタ? メールじゃなくて?
エディタ v8.13 なら (?#fulllinematch) 使えるがメールはどうだったかな…
連投スマソ
ここはプログラミング技術の板だから、 プログラミングそのものに関係ないアプリの使い方はアプリ板でやりなよ。 たとえプログラムをエディットするのだとしても。
皆様レスありがとうございます
>>614 ありがとうございます
(?#fulllinematch)(?\1)▼返信\n(.+)$
で検索対象とマッチすることは出来ましたが
Grepでその部分だけ取り出すということは出来ませんでした・・・
検索ではなくてGrepの対象としてマッチさせたいです
確かにプログラムに関係はありませんでした
>>614 さんに誘導して頂いたスレでもう一度質問してみます
スレ汚し失礼いたしました
まとま
C#のRegexですけど
やってやるです。
>>624 .をエスケープしないとか見てるとイライラする
職場でこういう正規表現見つけたら速攻バグ登録するんだけど、
書いた奴は正常系でテストして問題なかったとか
自分の無知を認めない言い訳ばかり
バグレポートの仕方が悪いんだろ ちゃんとどういう問題があるか認識させてやれよ
.NETだろ
>>626 外側はURLの可変部分だからいかにも後で参照しそうな箇所じゃないか
そこらへん質問では示されてないけど
>>630 その辺を考えてる人なら?:も使うよ
だからただの余分な括弧だと思う。
質問させてください、環境はWSH(JScript)です 2chのdatファイルは1行目が↓こうなってますが 名前<>メル欄<>日付 ID<> 本文 <>スレタイ 改行 スレタイだけを抜き出すにはどうしたらいいでしょうか? ↓こんなのしか浮かびません… line = str.replace(/<>(.*?)$/,"$1");
それを実行したらどうなった?
これで一応行けました、強引? title = str.replace(/(?:.*?<>.*?<>.*?<>.*?<>)(.*?)$/,"$1"); もっといい方法あれば教えてください
>>636 ありがとうございます!
スレタイが空文字はありえないですよね、確かに
ただ、メル欄(名前も?)は空文字がありえるんですよ…
あ、これでいいのか。
>>636 さんありがとう
^(?:.*?<>){4}(.+)$
ほんと2chまとめ系の質問多いな。
でも2chで業務に関わる正規表現を相談するわけにもいかないし
ただでアフィの手伝いするなんてお人好しだな。
642 :
632 :2012/03/04(日) 19:46:44.88
あ、一応弁解しとくと私はアフィサイトとかじゃないですよ 気になったスレをhtml変換して保存したいという、正規表現の練習も兼ねた趣味です 誤解があったらすみません そもそもまとめをJScriptでちまちま変換してる人いるのかな?
そうか、2ちゃんねるまとめサイトか…
>>642 ちまちました変換をしてる人がいるかどうかじゃなく、
その変換のやり方を聞いてくる人に、2chまとめ系がおおいってことだわ。
ついでにいうと、スレタイを取得するために正規表現を使う人は少ないと思う。 正規表現がいいよっていわれたのかもしれないけど。
647 :
646 :2012/03/07(水) 16:54:14.75
>>646 メールアドレスであることに拘らなければいいだけの話
mailto:の後ろにメールアドレス以外が来ることなんて普通ないだろ?
とりあえず/"mailto:.+?"/とかでいいんじゃね
>>648 レスありがとうございます
/"mailto:.+?"/とするとmailto:までマッチしてしまうのですが
メールアドレスのみマッチさせるのは不可能でしょうか?
よろしくお願いいたします
簡易的なチェックで良ければ、 「メールアドレス 正規表現」でググれば、例示がいっぱいあるよ。
>>649 (?<="mailto:)[^"]+
かな
[email protected] のboku部分とjitakusa-ba部分を抽出する
正規表現を /(.*)@(.*)/ と書いたのですがちょっとエッチだなと思いました。
654 :
デフォルトの名無しさん :2012/03/08(木) 20:00:04.53
>>653 メールアドレスはシンプルな正規表現では書けないんだ!
現実を受け入れろ!
メールアドレスが正しいかどうかはかけないけど、アカウントとドメインを分割するのには
>>653 である程度大丈夫。
"nanasi@home"@example.com
には対応できないけど、別にいいと思う。
>>653 でも最長一致優先探索ならそれは処理できるね。
(.*)@([^@]*)とするとアルゴリズムに関係なくましになるかね。
どうせならこうするのが正解でしょ ([^@]+)@([^@]+)
([^@]+)@([^@]+) <ブヒブヒ
>>649 だから、分かんないんだから無理しないで
"mailto:置換前の文字"
を
"mailto:置換後の文字"
に置き換えれば分かりやすくて確実だろって言ってるの
お前の目的はmailto:の後ろを置換することであって正規表現でメールアドレスに確実にマッチさせることじゃないだろうが
そうか?
目的が達成されれば良いわけだから、俺はありだと思うけどな
俺もそう思う。目的と手段を間違えないようにすることは大切だ
「メールアドレスを拾いたい」
のか、
「mailto:○○ を置換したいのか」
の違いでしょ。
>>660 の案に自分も一票。
>>664 プログラマと呼ばれる人たちには案外それを間違う人が多い気がする
だが新しい発想てのは稀にそういうとこから生まれたりするから否定はしない
「結果は一緒ですよ?」って言っても「いやいや、ダメだよ」っていう人に職業は関係ない 不慣れな人だからこそ「一緒ならやっといてよ」って感じで無知な押し付けをする人もいる
秀丸エディタのgrep(HMJRE.DLL V1.79)で "hoge"という単語を検索するときに '.'に続くもの以外を全て検索したいときの書き方を教えてください。 " hoge" ",hoge" 等は検索したいけど ".hoge"は検索したくありません
否定戻り読みを使う (?<!\.)hoge 直前に\.が来ないhoge サポートされてない時は[^.]hoge|^hogeで我慢
>>669 ありがとうございます。上手く行きました。
671 :
デフォルトの名無しさん :2012/03/15(木) 03:24:26.09
sedです foo bar *piyo *hoge *zieg kero piyo のような文章があるとして、先頭にアスタリスクがついている部分を別記号で囲みたいです。 foo bar [ *piyo *hoge *zieg ] kero piyo sedのスクリプトファイルで書いているのですが複数行にまたがるマッチングをこなしてくれません どうか御教示願います。
awk だが awk '{ if ($0 ~ /^\*/) { if (!flag) print("["); print($0); flag = 1; } else { if (flag) print("]"); print($0); flag = 0; } }'
perlだが perl -0777pe "s/((?:\*.*?\n)+)/[\n$1]\n/g"
もっと短くしなさい
>>676 perl -0777pe "s/((?<!a)(?:\*.*?\n)+)/[\n$1]\n/g"
違うそうじゃない
ワンライナーが集団で現れた
>>103 亀、正規表現一発じゃないけど
$data =<<'HERE';
みんなの憧れ Justin Drew Bieber が大好き
私だけの Justin が欲しい
やっぱ Bieber 、Bieber って響きがいいよね
HERE
@ary = split(/ | /, $data);
$result = '';
for (@ary) {
$isCurrentHankaku = /^[A-Za-z]/ ? 1:0;
$result .= $isPreviousHankaku & $isCurrentHankaku? " $_": "$_";
$isPreviousHankaku = /[A-Za-z]$/ ? 1:0;
}
print $result;
Unicodeからむと正規表現が長くなるね perl -CS -pe 's/(?<=\p{Latin})\p{Zs}+(?=\P{Latin})//g;s/(?<=\P{Latin})\p{Zs}+(?=\p{Latin})//g' <input
なんで2回してるの?
あ、そういうことか
Windows PowerShellから.Netのクラスを使用してチカン $v = "会場[大磯ロングビーチ]" [System.Text.RegularExpressions.Regex]::Replace($v, "^会場\[(.+)\]$","$1") 期待する結果:"大磯ロングビーチ" 実際:"" どうしてですか? "大磯ロングビーチ"ってチカンするにはどうしたらいいのでしょうか
大磯ロングビーチに行って女の子のオパイをモミモミすれば良いよ タイホ
>大磯ロングビーチ もう存在しない。
>>685 ""で囲んだ文字列は変数展開が有効になってる
抑制したいときは '' を使う(もしくは`)
[System.Text.RegularExpressions.Regex]::Replace($v, '^会場\[(.+)\]$','$1')
ちゅーか、$v -replace '^会場\[(.+)\]$','$1' でええやん
もしくは[Regex]::Replace($v, '^会場\[(.+)\]$','$1')
<que name="" mail="" vpos="-45400">/publish lv80605616_t2B_SHD_7@s35841 /content/20120319/lv80605616_214226439000_1_8370f8.f4v</que> この文字列から /content/20120319/lv80605616_214226439000_1_8370f8.f4v の部分を抜き出すにはどうすればいい? 数字とかは毎回変わるんだけど
690 :
デフォルトの名無しさん :2012/03/20(火) 23:41:40.87
que.innerHTMLで/publish lv8.....f4v が取れるから後は好きなようにする
>>689 >>660 変わらないところはべた書きして「毎回変わる」ところは.+?にでもしとけ
/<que.+?(\/content\/.+?f4v\/)<\/que>/
>>691 それだと可変の文字列内にたまたまf4vの文字列が出てきたらNG
.+で最長マッチにしておくか可変の文字列内に記号(.)が出てこない仕様ならば
/<que.+?(\/content\/.+?\.f4v\/)<\/que>/
の方がよさそう
できました
わざわざqueとか調べなくても/contentから<までをとればいいんでないの
Objective-CのNSRegularExpressionで、 行頭の半角スペース列を置換しようとして@"^ +"と書いたのですが、文字列の最初しか行頭と認識してくれないらしく、 複数行にまたがる文字列の各行頭のスペースが置換できないので、改行文字に続く次のスペースも検出しようとして @"^ +|\\n +" と書くと、改行文字も含めて置換してしまうため、マッチ部分をキャプチャする()を使って @"^( +)|\\n( +)" としたのですが、 (2147483647,0)という文字列の外の範囲がマッチされてしまい、置換しようとしてエラーとなってしまいます。 文字列途中も含めて、行頭の半角スペース列のみを置換するためにはどのようなパターンを使うのが適切でしょうか?
696 :
デフォルトの名無しさん :2012/03/24(土) 08:46:28.26
700 :
デフォルトの名無しさん :2012/03/25(日) 01:29:15.20
700GET
private class Person { public String personText = "Person"; } private class Student : Person { private String studentText = "Student"; public String getText() { return (personText + studentText); } } public class Entry { public static void test(Person p) { Student s = p as Student; Console.Write(s.getText()); } } これで、Entry.testをコールした後、GCでstudentTextは解放されるのでしょうか?
誤爆か
すみません、前と似たような質問なんですが Objective-CのNSRegularExpressionで、 数値実体参照を置換しようとして、@"[0]*([1-9][0-9]*);?"と書いたのですが、 またで始まる16進表記に対応できないので、16進表記にも対応しようとして @"[0]*([1-9][0-9]*);?|[xX][0]*([1-9A-Fa-f][0-9A-Fa-f]*);?" としたのですが、 やはり(2147483647,0)という文字列の外の範囲がマッチされてしまい、置換しようとしてエラーとなってしまいます。 また、エラーが出なかったとしても10進か16進かがわからないので、再度プリフィクスがかか調べないといけないので効率が悪い感じです。 10進も16進もマッチし、かつ10進か16進かを識別するためにはどのようなパターンを使うのが適切でしょうか?
704 :
696 :2012/03/25(日) 13:38:44.57
>>703 10進にマッチした時と16進にマッチした時で置換後の文字列を変える目的や
それぞれどんな文字列に置換したいのがわからないと何とも言えません
多くの正規表現実装では()でグルーピングする度に
$1から連番で「キャプチャ」され、置換後文字列として$1や$2…でキャプチャされた部分を取り出せますが、
今回のケースで有用かが不明です
$nの詳細は
>>696 のリンク先のTable 3 Template Matching Format参照
>>704 ありがとうございます。
10進と16進で処理を変えたいのは、マッチした部分をキーにしてディクショナリから置換後の文字列(というか文字)を取り出すさい、
16進のキーはディクショナリに用意していないので、いったん10進文字列に変換してから同じようにディクショナリにアクセスさせたいためです。(変換メソッドは10進か16進か自動判別してくれないのでここで処理を分ける他ありません。)
$の使い方についてなのですが、キャプチャされた部分を取り出して$表記を用いた別の文字列(template)にキャプチャした部分を埋め込めるというのは分かるのですが
別の文字列のある部分を$〜に置換するのではなくて、$でキャプチャした元の文字列自体を置換したいので、今回使えるかどうかはよくわかりませんでした
いろいろやってみたところrangeがぶっ飛んだ値になるのは、()を|などで分けて2つ以上設定した際に、マッチしなかった()について対応するインデックスのrangeのlocationがNSIntegerの最大値に設定されてしまうらしく
その値で分岐して、locationがNSIntegerMAXではないほうをキーとして取り出し置換することでとりあえず上手くいきました。
[xX]もキャプチャすれば判断できそうだけど。 置換対象はマッチした文字列全体でいいのでは。その環境使ったことないので、もし全体が取れないのなら全体をキャプチャ
707 :
696 :2012/03/25(日) 15:36:35.36
>>706 マニュアル読む限り、$0でマッチした文字列全体みたい
自分も環境がないので試してはいませんが
>>705 「locationがNSIntegerMAXではないほうをキーとして取り出し」
で解決したみたいだけど、正規表現のマッチ文字列による処理分岐させる王道はこんな感じで、
OR条件は正規表現の|に頼らずに言語のif〜else文使うのが良いかと
before = 文字参照文字列
if hoge =~ /*([1-9][0-9]*);?/
after = searchDic($1)
elseif hoge =~ /[xX]0*([1-9A-Fa-f][0-9A-Fa-f]*);?/
after = searchDic(hex2Dec($1))
else
文字参照じゃなかったよ
(でないかつ\Sを表すにはどうすれば良いのでしょうか?
[^\s\(]
あぁなるほど盲点でした。\sは\Sでないものですから「AでないかつBでない」という形[^AB]に直せますね。上手く行きました。 いつでも\sに対する\Sが存在するわけではないのではないか、そのような場合 |に対する&のようなものが必要になるのでは([^)] & [\S])と思いましたが、 文字クラスには必ず対する存在があるので必要ない、ということなのでしょう。
>>710 ,711
御二方レス有難うございました。
正規表現でおk
広告関係の削除フィルタを書いています。 <script\s[^>]*?google-analytics.com/ga.js と始まるフィルタがあったのですが、*? の意味が分かりません。 [^>]の0回以上の繰り返し が 0回か1回 ってことですか?
正規表現の「最短一致」だ 『[探索対象文字]*』だと、条件にマッチする文字列のうちなるべく長いものを取り出そうとする 『[探索対象文字]*?』というふうに、アスタリスクの後ろにハテナをつけると、最短のものを取り出す
あ、書き忘れたけど、最短一致は 正規表現エンジンによっては未対応のものもある(秀丸とか)のでそこだけ注意
最短一致に対応してないってどんだけ糞なんだよwww そんなの正規表現って言わねーよww
.*? で足りそうなんだけどなんで [^>]*? にしてあるんだろう
謎が解けました。ありがとうございました。
>>719 それだと意図しない結果が出ることがある
[^>]*? も不十分ではあるけど、少なくとも .*? よりは src属性値が返ってくる可能性が高い
>>721 ああそうか。<script src="..." />google-analytics.com/ga.jsとかにマッチしたらまずいもんね
どうもありがとう
723 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/01(日) 20:27:59.87
>>718 grepことglobal regular expression printさんに謝れ
>>718 実に正しい姿だよ。
拡張正規表現がメジャーになりすぎただけで
>>725 これだけメジャーになった今では、そっちが標準。
古来の奴はもはや「機能縮小版」に過ぎない。
正規表現もSQLと同じ道を歩んでいる気もするな。
>>727 こんなスレが役に立つこと自体、困ったことだ。
729 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/03(火) 11:07:26.03
超初心者質問で申し訳ないのですが、 javascriptで、 ABC|DEF|GHI|JKL 等を検索した時に一致した文字列全てを得る方法はありますか? 更にできればABCとGHIがマッチした場合に、0,2の値が取れれば嬉しいです。
"ABC".match(/(ABC|DEF|GHI|JKL)/); RegExp.$1; // ABC
ans=[]; m=[]; m["ABC"]=0; m["DEF"]=1; m["GHI"]=2; m["JKL"]=3; "ABCGHI".replace(/ABC|DEF|GHI|JKL/g,function(a){ans.push(m[a])}); ans[0,2]
正規表現スレなのにロジックが入るとはこれ如何に
クソみたいなレスしちゃってw
スルーされにくい質問のテンプレと例 ●正規表現の使用環境 C# ●検索か置換か? 検索 ●説明 全角の数字を無視したい ●対象データ 123 123 ●希望する結果 123 \d+と書いたら123と123がマッチしますが 123は除外するにはどう書けば良いですか?
意味のない改行はやめてくれ。
jane styleで「^^」という顔文字?を弾くにはどうしたらいいでしょうか? \^\^はダメでした
>>737 \^\^で合ってるはず。レスあぼーんしたいなら、NGExで
NGWord 正規(含む) \^\^
741 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/07(土) 13:19:47.71
●正規表現の使用環境 PCREライブラリを使用したアプリケーション ●検索か置換か? 置換 ●説明 指定範囲内に文字列が含む物を置換したい (例ではCCCを含むものを検索し対応する括弧に*を加える) ●対象データ (AACCCDDAABBB) (AACAABBDBABC) CDAA(DB(CC)C)(CDD) C(AA(ABBD)(BCCC)C) ●希望する結果 (*AACCCDDAABBB*) (AACAABBDBABC) CDAA(DB(CC)C)(CDD) C(AA(ABBD)(*BCCC*)C)
説明がおかしかったので訂正 ●説明 ×指定範囲内に文字列が含む物を置換したい ○括弧内に特定の文字列が有れば対応する括弧を装飾したい
743 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/07(土) 14:25:38.48
my $str=" (AACCCDDAABBB) (AACAABBDBABC) CDAA(DB(CC)C)(CDD) C(AA(ABBD)(BCCC)C)"; my $re="CCC"; $str =~ s/\(([^()]*?)($re)([^()]*?)\)/(*$1$2$3*)/g; print $str;
>>743 ありがとうございます!
ちなみにもし範囲指定記号が単一文字では無いケースではどのようになるのでしょうか?
例えば…
745 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/07(土) 14:56:50.48
●正規表現の使用環境 PCREライブラリを使用したアプリケーション ●検索か置換か? 置換 ●説明 HTMLタグ形式で括られたテキストで#が二つ以上有るものを検索 もし有れば対応する前方タグ内の後ろに@を付けたい ●対象データ <AB><CD>nea##kv</CD>nk#eccu</AB> nea<YY><EF>###v</EF>orarcmm</YY> <HA>ne#<YY>#</YY>ec#cv</HA>axxzi <KK>#<CD>asiaev</CD>un##ima</KK> ●希望する結果 <AB><CD@>nea##kv</CD>nk#eccu</AB> nea<YY><EF@>###v</EF>orarcmm</YY> <HA>ne#<YY>#</YY>ec#cv</HA>axxzi <KK@>#<CD>asiaev</CD>un##ima</KK>
タグのネストを扱わなければいけない時点で正規表現では無理だろ。
>>745 PCREは再帰参照使えるからネストのマッチはできる。
でも、置換するためにタグの名前を保存するのは無理じゃないかな。
あと、最後の例だけ性質が違うんだよね。
>>741 の書き方で言えば、
((CCC)CCC(CCC)) → (*(*CCC*)CCC(*CCC*)*)
に対応させる必要がある。
>>743 ではできないよね。
748 :
デフォルトの名無しさん :2012/04/15(日) 03:09:13.15
VB.NETで
http://www.google.com/を含む http://www.google.com/xxxxxxx をマッチさせたい時ってどうすればいいでしょうか?
(xxxxxx部分は変動)
If System.Text.RegularExpressions.Regex.IsMatch(TextBox1.Text, "ここに入る正規表現") Then
MsgBox("Google関連サイトだよ")
Else
MsgBox("Googleじゃないよ")
End If
です
例でgoogleを出しているだけでホスト名うんたらは無視してもらって大丈夫です
よろしくお願いします
750 :
デフォルトの名無しさん :2012/04/15(日) 03:21:32.75
752 :
デフォルトの名無しさん :2012/04/15(日) 03:27:48.05
123<span>abc</span>def</span>aa ↓ 123<span>abc</span>defaa このようにhtmlタグで閉じられていないタグを削除する正規表現はどのように書けばよいのでしょうか?
無理
それは無理。DOMとかでも、そもそも論理構造が破綻してるやつには無理。
$data = "123<span>abc</span>defaa"; $data =~ s|(</.*?>[^<]*?)</.*?>|$1|g; print $data; #=> 123<span>abc</span>defaa
>>756 hoge<span>123<span>abc</span>def</span>aa
>>758 >※このようにしてみたのですが、上手くいきませんでした。
おしいね。[0-9]は0から9の間の数字一つを差す。
なので[0-9]_[0-9]だと3_8や1_9と言った文字列にしかマッチしない。
こういう場合は後ろに+をつければ1つ以上の連続を意味するようになる。
[0-9]+_[0-9]+とすると32314_9723や1_3298741などを意味するようになる。
次に式の後ろに$1とあるが、これは括弧で囲まれた部分を呼び出すもの。
例えば(aiueo)kaki(kuke)koとした場合の$1にはaiueoが$2はkukeが入る。
あと正規表現は/と/の間に書くんだが君の書いた正規表現は終わりの/が抜けてる。
上の3点を考慮して書きなおすとこうなる。
[/^(
http:\/\/www\.forest\.impress\.co\.jp\/docs\/news\/[0-9]+_[0-9]+\.html )\?ref=rss/, '$1']
761 :
758 :2012/04/18(水) 16:41:28.31
762 :
デフォルトの名無しさん :2012/04/22(日) 12:13:29.18
馬鹿には無理
https?://[^ ]+
765 :
デフォルトの名無しさん :2012/04/23(月) 18:40:56.84
以下の解決方法を教えてください。 ●正規表現の使用環境 emacs-lisp ●検索か置換か? 検索 ●説明 特定の文字列Aにマッチしないが、文字列BorCにはマッチする文字列を検索したい。 初期状態でregexpは↓のようになっており "-\\(ring\\|history\\)\\'" 文字列末尾に -ring か -history があればマッチしてしまいます。 この状態を維持しつつ特定の文字列を含む文字列であればマッチさせたくない状況を作りたいです。 ●対象データ hogehoge-kill-ring hugahuga-history user-hogehoge-kill-ring user-hugahuga-history hogehoge-user-kill-ring hugahuga-user-history ●希望する結果 hogehoge-kill-ring ^ hugahuga-history ^ だけが難しければ最悪↓も含んでしまってOK hogehoge-user-kill-ring ^ hugahuga-user-history ^ 以上よろしくお願いします。
日本語でおk
否定先読み、否定戻り読みで-userつければいいんじゃないかな、、たぶん。
>>765 ^((?!user).)*-(ring|history)$
もうちょい素直に説明してくれよ
テンプレのおかげで読み取れるけど説明だけだと意味不明だわw
特定の文字列Aがuserの場合の例、って書いてくれてたら分かりやすかったね
770 :
765 :2012/04/23(月) 21:09:36.74
>>766 (? )系は使えないようです。regexpエラーになりました
771 :
768 :2012/04/23(月) 21:15:34.57
emacs-lispは環境ないから検証できないんだよね 分かる人待ち
さっぱりわからんけど、現状の検索にマッチしたあとで、 re-search-backwardってやつでuserを探して、見つからなければおkってすればいいんでない
773 :
765 :2012/04/23(月) 22:16:02.62
>>772 自分で書くコードならそうしますが、既存パッケージへわたすregexpなので、それができないのです。
emacsenってそういうの改造するのがすきなんだと思ってた。 キーワードがあるけど出来ないなら無理なんじゃない?
●正規表現の使用環境 PCRE ●検索か置換か? 置換 ●説明 <tag>から</tag>内の文字列abcをABCへ置換したい ●対象データ xabcxxx<tag>abcxxxxxxxxxxxabcxxxxxxxabcxx</tag>xxxxabcxxxabcxx xabcxxx<tag>abc</tag>xxxxaxxxxxxxabcxxcxxxxx<tag>abcxx</tag>xxx ●希望する結果 xabcxxx<tag>ABCxxxxxxxxxxxABCxxxxxxxABCxx</tag>xxxxabcxxxabcxx xabcxxx<tag>ABC</tag>xxxxaxxxxxxxabcxxcxxxxx<tag>ABCxx</tag>xxx
776 :
デフォルトの名無しさん :2012/05/07(月) 23:00:02.41
特定タグの中身だけ対象にしたい奴よくいるけどさー 素直にxpath使えよ捗るぞ
たぶんXML関連の知識知らないって、そういう人は…
>>776 domやxpathが使えない環境なんだよ
そりゃ何を使ってもいい環境ならいくらでもやりようはあるさ
単純に範囲抽出→置換を繰り返せばいいだけだからな
なんていうか正規表現単体でifと同じ効果を持たせるパターンとかあるだろ?(正規表現のデザパタみたいな感じ)
そういう未知のパターンを知ってるミラクルな人が来るのを期待してるのだよ
有るのかどうかわからんがね
使用環境にPCREとしか書かないのが悪い
pcreは先読み後読み迄しかサポートしてないし特定タグ云々は無理っぽい。
>>778 データを<tag>, </tag>でsplitして順番に舐めて置換してjoinする。
782 :
デフォルトの名無しさん :2012/05/08(火) 14:38:46.54
>>781 <div>abc<div>abc<div>abc</div>abc</div>abc</div>
検出結果に正規表現で置換掛けろ
785 :
片山博文MZボット ◆0lBZNi.Q7evd :2012/05/08(火) 16:16:35.38
int depth = 0; 文字列を先頭から順番にスキャンする。 "<tag>"が見つかったらdepth++;する。 "</tag>"が見つかったらdepth--;する。 depth != 0のときに"abc"が見つかったらABCに変換する。
786 :
デフォルトの名無しさん :2012/05/08(火) 22:24:35.73
\rが30回登場したら30回目より後ろの文字を削除したいんですがどう記述したら良いでしょう。 \rから次の\r間には任意の文字数の文字列があります 言語はパールです $s =~ s/(((.*?)\r){3})(.*$)//s; print "$1\n$2\n$3\n$4\n"; これではだめでした
>>786 (\r{30})[\s\S]* を $1 に置換すればいい
その$1にどういう不満があるの?
ためしてないけどこんな感じかな (([^\r]*\r){30}).* \1 \rは連続して30回じゃないよね? あとperlでやるなら無理に正規表現使わなくてもいい気がする
>>789 perlの正規表現あんま得意じゃないけど、
30回以下の場合もあるんじゃねとふと思った。
まぁ
>>786 に試してもらえばいい話だけど。
>>789 それは
>>786 の3を30にしただけじゃダメなのかい。
それにしても例として3に減らしていただけだと思うが。
ABCが登場したらその後に登場する全てのDEFをXYZへ置換するにはどうしたらいいのん? xkdmeABCidkDEFledxaoDEFasdDEF ↓ xkdmeABCidkXYZledxaoXYZasdXYZ
793 :
792 :2012/05/09(水) 20:12:56.44
色々やってたら解決しました
そのいろいろやった結果を書かんかい('A`)
はっきりしない質問で申し訳ないのですが、どうも正規表現を書くのが苦手らしく いつも苦労します。emacs-lispでは、M-x himark-regexp でマッチする所が ハイライトするかどうかで、うまくいってるか確認しながら書くと言う方法に 気がついてから比較的楽になったのですが、この前perlですごく苦労しました。 perlで正規表現書く時、途中まで書いてここまでうまく行ってるとか 楽に確認できる方法ってなんか使ってますか?
>>796 ()でくくって$1 とかでprintしながら確かめろって感じですかね、やっぱり。
今度からそうします。
老婆心ながら言っておくと、Webサービスを使うときはなにが送信されるかをちゃんと理解してね。
800 :
デフォルトの名無しさん :2012/05/10(木) 00:07:36.73
ここまでもuso800
>>792 これ、正規表現で出来なくね?
出来た人がいたら解法plz!
>>801 for文とか使ってマッチしなくなるまで置換してるんじゃね?
unit testで機械的に確認
>>792 (?<=ABC.*?)DEF
だろwwwwとか思ってやってみたら駄目だった件
?<=で可変長対応かつ、最短でも最長でもない、すべてのマッチ長さでマッチしないと出来ないね。
bregonig.dllが使える正規表現チェッカーみたいなものってないのかな? もしくはperl5.10対応のチェッカー オンラインのサービスだとレスポンスが遅かったりグループ化の中身を表示してくれなかったりと今ひとつなんだよね…
自作という発想は
正規表現チェッカーみたいなものって?
バリデータじゃね?
正規表現チェッカーでぐぐって出てくるものみたいなものじゃね?
>>806 サクラエディタのようなエディタ系しかないな
でもどれもマッチグループの中身を知る事は出来ない
perlは何でないんだろうな まぁ大抵の物は先読み後戻り迄で事足りるんだけどね
814 :
デフォルトの名無しさん :2012/05/17(木) 23:15:55.05
しばらくずっとプログラミングしてなかったもので、正規表現を忘れてしまったのですが、PHPにて Japanese system that <a title=" どうやら〜らしい" style="text-decoration: underline" href="javascript:;">apparently</a> のような文章で、両<a>タグを除去して(apparentlyは残す)、テキストだけにしたいのですが、どのように書けばいいでしょうか?
815 :
814 :2012/05/17(木) 23:24:20.18
>>812 のリンクで試してみたのですが、
</?a.*>
では<a>...</a>全てがマッチしました
皆さんは何と呼ぶか分かりませんが、ものぐさな処理方法をしないといけないんだと思いますが、どのようにすればいいのでしょうか?
もっと完璧で良い方法が有るけどとりあえず提示された解を弄る方向で </?a.*?> コレでいける
817 :
814 :2012/05/17(木) 23:36:41.09
>>816 ありがとうございます
ちょうど
>>812 のサイトで今自分も思い出して同じ方法で出来て
$pattern = "</?a.*?>";
$result = 'Japanese system that <a title=" どうやら〜らしい" style="text-decoration: underline"href="javascript:;">apparently</a>';
$results = preg_replace($pattern, '', $result);
var_dump($results);
のようにしたのですが、結果は何故か
Jpnese system tht < title=" どうやら〜らしい" style="text-decortion: underline" href="jvscript:;">pprently<>
となり、aだけが抜けた形になってしまいました
どこが間違っていますでしょうか?
818 :
814 :2012/05/17(木) 23:39:15.24
バカでした デリミタを書いていませんでした 久々だったので忘れていました すみません
半角/全角を区別しない検索ってどうすることが多いんだろう。 それらを区別しないオプションが無い環境かつ、あらかじめ文字列を正規化できないような状況という前提で。 [HH][OO][GG][EE] (フォントによっては分かりにくいけど半角と全角の両方を記述)ってやってるけど 何とかならないもんだろうか。
大星由良助実は大石内蔵助とか。
>>821 ですよねー(´・ω・`)
HOGEという文字列から[HH][OO][GG][EE]を生成するような仕組みを作らないとダメか……。
それ作れるのに、あらかじめ文字列を正規化とかは出来ないの?
>>823 ざっくり言うと、マッチ時は全角半角を区別してほしくないけど、
そのマッチ箇所の文字列は、後で全角半角そのままの状態で使うよ、って感じ。
NFKCかけるだけだな
>>824 ああ、なるほど、そういう場合は確かにありそうだね。
理解した、ありがと。
正規化した文字列を作ってマッチして位置を求めてから元の文字列から 取り出すって手もあるね。性能が要求されるところでなければ書くのが 楽な方でいくのもあり。
>>827 ああ、なるほど。
プログラムで関数化するなどの場合は、そっちの方が使いやすいかもしれない
C++のメソッド名にマッチする表現を教えてください。
アホか
\D\w* とかでいける?
833 :
831 :2012/05/21(月) 22:52:32.93
>>832 C++も正規表現も勉強中なのは認めるが、正解を教えてくれ
>>829 というわけで>831は初心者の戯言なのでスルーで
/C\+\+のメソッド名/
\w+でよくね?
お願いします ●正規表現の使用環境 VC# 2010exp ●検索か置換か? 検索 ●説明 string内にハングル文字が含まれるかどうかチェックしたいです
[\x{1100}-\x{11f9}\x{3131}-\x{318e}\x{ac00}-\x{d7a3}]
838 :
836 :2012/05/22(火) 00:45:34.87
>>837 string text = textBox1.Text;
Regex regex = new Regex(@"[\x{1100}-\x{11f9}\x{3131}-\x{318e}\x{ac00}-\x{d7a3}]");
if (regex.IsMatch(text))
MessageBox.Show("true");
で実行すると「16 進数の数字が正しくありません。」とエラーになってしまいます。
↑ なんだこれ? 新手のスクリプトか?
{}いらね
未だに、(?=)という先読みの意味がわかりません。 何を何より先に読むのでしょうか?
評価するよりも先に先を読む
何が、何を評価するよりも、先に読むのですか?
正規表現エンジンが文字列を評価する前に読む 先読みしても「評価する位置(一般的になんて表現するんだ?)」は移動しない
先読みはlook-aheadの翻訳です。 マッチ位置を変更せずに、 文字列のマッチ適合最後部より後ろの方に指定したパターンがあるか調べるのです。 foo(?=bar)bazはfoobazbarにはマッチしますが、 foobazにもfoobarbazにもマッチしません。 foobazでは後方にbarがないし、 forbarbazでは動かないはずのマッチ位置が適合しません。 barfoobazでもダメです。
ご丁寧な解説ありがとうございます。 foo(?=bar)baz はどのような文字列にマッチするのでしょうか?
foobaz(?=bar) と書かないのは嫌がらせのため?
>>845 > foo(?=bar)bazはfoobazbarにはマッチしますが、
間違ってる。foo(?=bar)bazはいかなるものにもマッチしない。
>>846 どのような文字列にもマッチしません。
回答スルーして適当な質問を繰り返さないでください。
いや、たぶんそうでしょ 原理がわかってないから誰なのかがすぐにわかる
>foo(?=bar)bazはfoobazbarにはマッチしますが、 適当過ぎてワロタw てか俺の知らないところで仕様が変わったのかと思ってさっきたしかめたわw
生兵法は怪我の元w
854 :
デフォルトの名無しさん :2012/05/23(水) 01:14:11.33
生焼けの貝は腹痛の元
否定先読みの方はこんな使い方まで出来ちゃうんだぜ? (?!^2chmate$)^2ch$
プログラムから使う場合だと、それこそifを1つ増やすだけで出来ちゃうことも多いから あんまり使う機会がないんだよなあ。
別に間違ってるようには見えないが。 % echo "2ch\n2chmate\n2ch\n2chmate" | grep -Pn '(?!^2chmate$)^2ch$' 1:2ch 3:2ch
↑ windowsのクセにw
>>859 (?!^2chmate$)^2ch$ と ^2ch$ でマッチするものは変わらないので先読みの例として不適切。
862 :
デフォルトの名無しさん :2012/05/27(日) 11:22:25.53
以下のように検索と置換をしたいのですが name0 name1 name2が順番が異なる時どのような正規表現をかけばよいでしょうか <en_Image name0="image.png" name1="カツ丼" name2="ご飯"></en_Image> <en_Image name0="image.png" name2="ご飯" name1="カツ丼"></en_Image> <en_Image name2="ご飯" name1="カツ丼" name0="image.png"></en_Image> ↓ <en_Image name="カツ丼ご飯image.png"></en_Image> name0 name1 name2が順番が異なる時,以下のような正規表現では取り出せますん pattern="<en_Image.*?name0=\"(\\w+?).*?name1=\"(\\w+?).*?name2=\"(\\w+?)">.*?</en_Image>" replace="<en_Image name==\"$2$3.$1\"></en_Image>"
>>862 考え方は、先読みを3回やってポインタを動かさずにキャプチャー、後は読み飛ばし。
エスケープ無し、name{0,1,2}が文字列(属性値)内に出現しない、
属性値は2重引用符のみを使用、=の前後に空白なし、で書けば、
<en_Image(?=.*name0="(.*?)")(?=.*name1="(.*?)")(?=.*name2="(.*?)").*?</en_Image>
>>863 先読みの括弧内でさらぬキャプチャの括弧が使えるとは知らなかった
862じゃないけど勉強になったthx
コレ
>>863 また俺の知らないうちに仕様が変わったのかと思ってやってみたらやっぱり出来ねぇじゃねぇかw
毎回間違ってる奴は誰だよw
蛇足だが。 #!/usr/bin/perl use strict; use warnings; use utf8; use open qw/:encoding(utf8) :std/; use feature qw/say/; #use re qw/debug/; use Data::Dumper; my @tags = ( '<en_Image name0="image.png" name1="カツ丼" name2="ご飯"></en_Image>' , '<en_Image name0="image.png" name2="ご飯" name1="カツ丼"></en_Image>' , '<en_Image name2="ご飯" name1="カツ丼" name0="image.png"></en_Image>' ); my $re = qr!<en_Image (?=.*name0="(.*?)") (?=.*name1="(.*?)") (?=.*name2="(.*?)") .*?</en_Image> !ox; for (@tags) { say; s!$re!<en_Image name="$2$3.$1"></en_Image>!; say; say Dumper([$&, $1, $2, $3]); } say $^V;
どうでもいいけど <en_Image><foo name2="ご飯" name1="カツ丼" name0="image.png"></foo></en_Image> なんかにも引っかかるようにしてるのはわざとなのか?
>>870 そこまでの厳密さが必要なのかねえ?直すとしたら↓か?
[^<]*?</en_Image>
結局できないと言ってる
>>865 の環境は何だったのだろうか
>>865 の知らないうちに変わったのって何年も前なんだろうな…
>>870 他にもtestname2="hoge"とかfoobarname1="orz"とかにもヒットするぜい
なんでこのレベルの奴がこの板にいんだよ年々レベル下がってるじゃねーか死ね
食物連鎖の上の人は他のところに行ったよたぶん
>>875 あれ?と思って板名みたらプログラムであって上級プログラムでもスーパープログラマーでもなかったけど
何を期待してるの?
>>875 お前がレベルを上げてくれれば済む話だな
コピペとわかっていてもみんな反応したくなる ある意味レベル高いな
どうもうまく動かねぇと延々悩んでたら、単に「?」が対応してなかったっていう…
毎回間違ってる奴は>865だったっていう…
すみませんが、お力をお貸しいただけないでしょうか?
例えば、
http://edition.cnn.com/2012/06/02/world/meast/egypt-mubarak-profile/index.html?hpt=hp_c1 のような英文の本文を取得してきた場合に、改行されずに全部1文で取得されてきたとします
このような場合、見やすくするために改行を入れたいのですが、自分には難しくて出来ませんでした
ピリオドだけで改行すると、A.T.Tのような単語でも改行されますし、?の場合も改行しないといけません
では、ピリオドの後に(空白文字があっても可)大文字が続くという発想では、I like it.(He knew.)のような場合はダメです
最後が小文字で直後がピリオドというのも、USA.のような場合は改行されません
更に、日本でも同じですが、会話文中は"I know."のような形をとりますので"の直前のピリオドでは改行し、最後の."の"で改行する
のように複雑になってしまいます
どのような正規表現を書けば宜しいのでしょうか?
また、上記を満たすようなコードの書かれているサイトなどあれば紹介していただきたいと思います
宜しくお願い致します
改行されてるやん
>>882 じゃないけど…
> 改行されずに全部1文で取得されてきたとします
改行込みで取り込見直すようにする方向で努力したほうがいいんでないか
887 :
デフォルトの名無しさん :2012/06/03(日) 05:27:17.10
それブラウザ依存じゃね?
The second time proved to be the charm for space engineers in the United States. They successfully launched a rocket to send an unmanned module to the International Space Station after a failed attempt three days ago. If all goes according to plan, this will be the first private cargo delivery to the ISS. (George Diller / NASA Launch Commentator) "Five, four, three, two, one, zero, and launch of the SpaceX Falcon 9 rocket as NASA turns to the private sector to resupply the International Space Station." The rocket lifted off Tuesday from an American air force base in Florida. It's carrying a spacecraft called Dragon. Engineers at the U.S.-based Space Exploration Technologies, better known as SpaceX, created it. They'll control it, too. The module separated from the rocket about 10 minutes after liftoff. It's now orbiting the Earth, roughly 320 kilometers above the surface. Engineers will try later this week to get the Dragon to dock at the ISS. The operation requires extreme precision because the station is orbiting the Earth at eight kilometers per second - faster than a speeding bullet.
>>886 DOMDocumentでぐぐったらPHPだったので書いてみたけど不慣れなので多分やぼったい
<?php
$doc = new DOMDocument();
$url = "
http://cgi2.nhk.or.jp/e-news/news/index.cgi?ymd=20120601 ";
$doc->loadHTML(file_get_contents($url));
$xpath = new DOMXPath($doc);
$buf = "";
foreach ($xpath->query("//div[@id='tab_1']//node()") as $node) {
if ($node->nodeType == XML_TEXT_NODE) {
$buf .= $node->nodeValue;
} else if ($node->nodeName == "br") {
$buf .= "\n";
}
}
echo trim($buf), "\n";
?>
891 :
デフォルトの名無しさん :2012/06/03(日) 13:55:10.06
どうもプログラマ以外の奴がスレに入り込んでいるようだな。 妨害要員でも呼んできたか?w
>>891 > どうもプログラマ以外の奴
自己紹介乙
まあPGじゃなきゃ参加できないわけでもないしな。
ここはム板ですから何もおかしくありません
プログラムが参加してきたのだな
すみません Objective-CのNSRegularExpressionで、ある文字列について、 ・順番通りに ・一部が欠けてもよく ・途中に余計な文字が入ってもよく ・一致する数を数える ようなパターンを組みたいのですが、 例えばABCDEという文字列があったとして ABCDE→5(全件一致) AABBCCDDEE→5(全件一致) ADCBE→3(A,C,Eが一致) AFGHBCDE→5(全件一致) EDCBA→1(Eのみ一致) というように数えたいのですが、上手くいきません。 .*?(A)?.*?(B)?.*?(C)?.*?(D)?.*?(E)?.*? ではダメみたいなのですがどうするのが正しいでしょうか
間違えました Dが先に一致して以降BCは一致しないので ADCBE→3(A、D、Eが一致) です。
それ、正規表現の仕事じゃないやんw
正規表現でやるには複雑すぎるね 素直にプログラムで書いたほうが早いよ
こんな感じかな? ^[^ABCDE]*(A)?[^BCDE]*(B)?[^CDE]*(C)?[^DE]*(D)?[^E]*(E)?.*$
それがほんとにマッチするかわからんけど マッチしたとしても1行丸ごとやっちゃうから件数が取れないな
ありがとうございます。
>>900 を見て気づいたのですが、これだと最初に最初の文字と最後の文字が来てしまった時点で終わってしまうんですね。
で、@"^[^A]*(A)?[^B]*(B)?[^C]*(C)?[^D]*(D)?[^E]*(E)?.*$"などとしてみると、途中の文字が欠けると以降マッチされない。
例えばAEBCDEとかだったら、AとEマッチで2ではなくて、2文字目のEを無視して全件マッチで5としたい。
最も多くマッチするマッチングを探そうとすると、やっぱりプログラミングしないとダメっぽいですね・・・。
?
>>904 > AEBCD→(A、Eが一致) こういう仕様だった
それどこから持ってきたの?
えーと、論点をハッキリさせてくれないと困るな。
AEBCD→(A、Eが一致)
>>896 と
>>897 を見て、これ以外の解釈があるってことかな。
そうならば、具体的にそれを示してくれないと。
「最長でマッチしてくれ」っていってるんじゃない? AEBCD->ABCD
>>908 その事例は書いてないし、>896の下記事例と矛盾する。
> AFGHBCDE→5(全件一致)
まあ、要件をちゃんと言葉で説明出来てない質問者も悪いと思うけどね。
な、なんか狐につつまれたような気がする…。(AA略
>>909 >>896 と
>>897 に「最長でマッチしてくれ」という内容は無いです。
最長でマッチさせたいという要求は
>>902 で初めて出たものですね。
ただし、最大限好意的に解釈すれば「最長となるパターンが欲しい」とも読み取れます。
細かく書かないと難しい。
せっかくだから書きますね。
>>910 いや、そこは矛盾してないですよ。
例題の対象はABCDEだけなので、FGHは「余計な文字」となります。
書いてみました。
>>896 の、
・順番通りに
の意味は、
(1)EDCBA→1(Eのみ一致)
(2)ADCBE→3(A,C,Eが一致)※これは間違い
と、
>>897 の、
(3)ADCBE→3(A、D、Eが一致)
以上の例から、
<A>出現した[A-E]を基準として、次に検索するのはそれ以上のもの、これを繰り返す
というルールだと解釈しました。
このルールでは、
AEBCD→(AEが一致)
となります。
そして、
<B>文字列全体でA→Eという順序を守りつつ、(書いてないけど)最長となるパターンを選び取る
というルールなら、
(1)は、E|D|C|B|Aの5パターンで一致
(2、3)は、ADE|ACE|ABEの3パターンで一致
を結果としなくてはなりません。
このルールでは、
AEBCD→(ABCDが一致)
となります。
<C>さらに、<B>のルールに加えてA→Eというサーチ方向で最初に見つかったものだけを結果とする
ならば、
(1)は、E
(2、3)は、ADE
AEBCD→(ABCDが一致)
となり、例題および
>>909 さんの考えと一致します。
が、、、
>>896 と
>>897 からここまで気を利かせるのは無理があるので、
ルールを確定させるには例題不足ですね、やはり。
CABED
↑こういう例題があれば、このような論争は起きません。
<A>ではCE、
<B>ではABE|ABD、
<C>ではABE
このように<A><B><C>の結果がハッキリと異なれば、ルールを確定できましたね。
そう、もともと最長一致にすべきかどうか判断できる例が載っていなかったんだ。 だから勝手にAEBCD→(A、Eが一致)なんて決めてはいけないんだよ
DACB このときどうするかがわかればそれでよくね。
元の例から、AEBCDのとき、ABCDをとってはいけなくなる根拠を出さないとな。 ABCDととればいいはずなのに、気を利かせてAEにするのは無理がある、とも言い換えられる状態。
>>915 >>917 なるほど、それならその通りですね。
例題だけで判断すれば、どちらともつかないから決めつけられない。
質問者が当初<A>をルールとしていたはず、という根拠の最後の私の判断基準は、
重要なキーワードである「最長」という言葉がなかったということです。
それを普通に考えると、<C>よりは<A>に分がありますよね。
突き詰めると、私の判断(確信)は質問者のマインドも汲み取ろうとした結果のようです。
あとまあ隠れた要因として、
・質問者のアイデアの延長線で出来る
・正規表現で可能な範囲である
のは<A>だけ?ということもありますけどね。
>>916 一応ABCDE5文字が対象なので…。
>>918 ん?勘違いなさってる。
最短一致じゃないですし、
>>912-914 は、細かく言えば確定できていない、ということを示しました。
> それを普通に考えると、<C>よりは<A>に分がありますよね。 これを受け入れたとして、 > AEBCD→(A、Eが一致) こういう仕様だったんだから(笑) こうまで言い切れる理由にはならんだろ
●正規表現の使用環境
鬼車
●検索か置換か?
検索
●対象データ
あああかか
うううきき
いいいくく
●希望する結果(あああ いいい うううをマッチさせる & きき くく の文字を含まない)
あああ
(あああ の部分のみマッチ)
●説明
複数の文字(文字列1)をマッチさせたい、そして
その文字列中で、指定した文字が入ってたとき、その文字(文字列1)はマッチしないということは可能でしょうか。
[例文]
あああかか
うううきき
いいいくく
>>922 に続く
>>921 の続き
↓構文はnot使ったりと正規表現と関係無くて申し訳ないですが自分のイメージ的にはこんな感じです。
( (あああ|いいい|ううう) (not (きき|くく)) )
この場合、「あああかか(正確には あああ の部分のみ)」がマッチとなり、
文字列中に「きき、くく」が文字列に含まれる
「うううきき(正確には ううう の部分)」と「いいいくく(正確には いいい の部分)」はマッチさせない感じです。
調べた感じですと、否定文を使う形になるとは思いますが、否定文が結構複雑そうで、
それに複数の否定を加えるようだとかなり難しいように感じますが、実際にこのような正規表現を実現出来るか不安なのですが、実現可能でしょうか。
また、もし上記を満たす正規表現が分かる方おりましたら教えて頂ければ幸いです。
どうぞよろしくお願い致します。
>>923 ありがとうございます。
自分の環境だと、うまく動かず+?$を外して
(あああ|いいい|ううう)(?!きき|くく)でうまく動きました。
後述で補足となりますが、大変申し訳ありません・・・言葉足らず、条件抜けとなってしまいました。。
大変申し訳ありませんが、例文ですが、
あああ○○○○○かか○○○○○○
かか○○○○○○あああ○○○○○
いいい○○○くく○○○
うううきき
ききううう
ううう○○○○○きき○○○○○○
きき○○○○○○ううう○○○○○
上記のように否定の単語の「きき」&「くく」が「ううう」「いいい」の直後に来るわけではなく
前後や間を挟んで出てくる場合もありました。。
上記の例文で、下記のような文を打つと、
( (あああ|いいい|ううう) (not (きき|くく)) ) ←これはイメージで正規表現文じゃないです。
(あああ|いいい|ううう)(?!きき|くく)+?$
あああ○○○○○かか○○○○○○
かか○○○○○○あああ○○○○○
上記のあああの部分だけマッチさせたいのですが、これは可能でしょうか。
もしお分かりの方おりましたら再度となってしまい申し訳ありませんが教えて頂けないでしょうか。
後出し条件と言葉抜けとなってしまい大変申し訳ございませんでした。
>>924 ごめんそんな気はしてたけど考えるの面倒だった。
これでどうかな。
^(?!.*(きき|くく))(?=.*(あああ|いいい|ううう)).*$
>>925 おおお、うまく動作致しました!感動で鳥肌です。。
説明不足で申し訳ありませんでした、再度お答え下さってありがとうございます!
本当にありがとうございます!
正規表現使う場面も多いので勉強してきます。
変換のtrを使わず置換で abc -> ABC Abc -> ABC aBc -> ABC こんな感じにできないのかな s/[a-z]/\U$&/g としてもダメだった…
sed -e 'y/abchigedjfklmnopqrstuvwxyz/ABCHIGEDJFKLMNOPQRSTUVWXYZ/'
s/[a-z]/\u$&/g; おしかったね
((角|丸)ゴシック|明朝) こういった入れ子?を書くと例えば丸ゴシックにマッチしますが丸にもマッチします どのように書けばよいのでしょう (i(Phone|Pad|OS)|Android) こういうのも同様ですね
丸)のところをエスケープしてみれば?
>>930 ((?:角|丸)ゴシック|明朝)
こういうこと?
>>930 「丸」にマッチする? 環境は?
egrepではマッチしないんだが。
((角|丸)(ゴシック|明朝))
>>934 それでは「丸明朝」にマッチすると思うが。
角ゴシック|丸ゴシック|明朝 なんだから ((角|丸)ゴシック)|明朝
え?
どんどん酷くなってる件w
>>930 > 丸にもマッチします
$ printf 'A\nB\nC\nD\n' | egrep '((A|B)C|D)'
D
本題と関係ないけど、egrepではなく、grep -eを使った方が好き。
誰が質問者で条件がどーなのかさっぱりw 質問かどうかもあやしい
「角ゴシック、丸ゴシック、明朝」にマッチして 「角、丸」にマッチしなければいいんだろ だったら ([丸角]ゴシック|明朝) でいいんじゃね?
マルチバイト文字に対応してればそれでいいかもね
>>942 ちゃんと嫁って、もう一例書いてあるだろ
(i(Phone|Pad|OS)|Android)
(iPhoge|Android)
>>944 よく読んでも、そっちについてはどういう不都合があるのか書いてないように見えるけど?
((角|丸)ゴシック|明朝)の場合は942が書いてるように[]で括ればいいと思う 何故なら文字が単独だから、んで下の例では[]は使えない 故に(iPhone|iPad|iOS)|Android)を(i(Phone|Pad|OS)|Android) こうすれば効率的と判断したからでは?
iPodに対応してないぞ
(i(Phone|P[ao]d|OS)|Android)
角明朝
丸明朝
の「明朝」にマッチしていいのか悪いのか?
それ以前に
>>930 の「丸にもマッチします」とは何なのか?
952 :
その@ :2012/06/20(水) 18:31:30.82
正規表現について質問です。
↓こーいう文字列に対してC#で正規表現を掛けようと思っています。(実際には改行コードは含まれていません。)
<li class="g"><div class="vsc" sig="jNt" bved="0CDUQkQo" pved="0CDQQkgowBQ">
<h3 class="r"><a class="l" onmousedown="return rwt(this,'','','','6',
'AFQjCNE3acQNFxBDQ4S2wYC0wVeDKQSSjQ','',
'0CKUBEBYwBQ',null,event)" href="
http://www.jpa.or.jp/chishiki/index.html "><em>たまご</em>
の知識</a></h3><div class="vspib" role="button" tabIndex="0" aria-label="結果の詳細">
<div class="vspii"><div class="vspiic"></div></div></div><div class="s">
<div class="f kv"><cite>www.jpa.or.jp/chishiki/index.html</cite><span class="gl">
953 :
そのA :2012/06/20(水) 18:32:05.39
- <a onmousedown="return rwt(this,'','','','6','AFQjCNFdsuuoe_u5WYesXSqMlVLQ9T5KuA','','0CDcQIDAF',null,event)" href="
http://webcache.googleusercontent.com/search?q=cache:wVOdEgj0slAJ:www.jpa.or. jp/chishiki/index.html+&cd=6&hl=ja&ct=clnk&gl=jp">キャッシュ
</a></span><span class="vshid"><a href="/search?hl=ja&q=related:www.jpa.or.jp/
chishiki/index.html+%E5%8D%B5&tbo=1&sa=X&ei=sZXhT6-XJobjmAWxq53xAw&ved=0CDgQHzAF">
類似ページ</a></span></div><div style="display: none;" id="poS5" class="esc slp">一般公開で +1 しました
<a class="fl" href="#">取り消す</a></div><span class="st"><em>
卵</em>は私たちの食生活に欠かすことのできないほど身近なものです。それだけに、
「実は知らなかった!」ということも多いのではないでしょうか? このページでは、
<em>卵</em>についてのいろいろな知識を紹介しています。
興味をもった項目をクリックして、<em>卵</em>への理解を <b>...</b>
<br></span></div></div></li>
※メッセージが長すぎます、と怒られちゃうので分割して投稿しています。
954 :
そのB :2012/06/20(水) 18:34:34.61
そして、
http://www.jpa.or.jp/chishiki/index.html というURLを抜き出す為に
// string wk = ごにょごにょした上記のHTMLが含まれています。
System.Text.RegularExpressions.MatchCollection mc2 =
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[A-Za-z0-9_\.\/].*?)""><em>.*");
foreach (System.Text.RegularExpressions.Match m2 in mc2)
{
string s = m2.Groups["url"].Value;
}
というコードを実行すると …続く
955 :
そのC :2012/06/20(水) 18:37:11.79
956 :
デフォルトの名無しさん :2012/06/20(水) 18:37:29.01
ちょwww
もうちょっと整理しろよ 長々と書くならコピペだけで動くコードにして、コード貼るサイトに書いてくれ。
結局、 null,event)" href="[URL]"><em> の[URL]部分だけ取り出したいのに、うまくいかないということか?
ざっと見た感じ (?<url>[A-Za-z0-9_\.\/].*?) の後ろのピリオドが邪魔じゃね? パラメータいらないなら、:だけ追加して (?<url>[A-Za-z0-9_\.\/:]*?) こうとか?
>>960 コード貼るサイトあるんだよ。
質問スレのテンプレ探してみ。
>>961 ありがとうございます。 "" を含まないという意味ですよね。
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)""><em>.*");
でやってみたところそれらしいそれらしい値は取れる様になりました。
ただ、ごにょごにょしたHTMLが10件ほどあって
そのうちの7つはしっかり抽出出来るのですが
それ以外が未だうまくいかないのでもうちょっと頑張ってみます。
964 :
963 :2012/06/20(水) 20:32:55.97
>>962 ありがとうございます。便利なサイトがあるものですね。
↓の正規表現を書いていたのですが、
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)""><em>.*");
この正規表現の場合、(A)の場合は取得出来るのですが、
(B)の場合に取得が出来ません。(B)の場合でも取得出来るにはどういう条件を追加すれば良いでしょうか?
(A) BYwBw',null,event)" href="
http://www.nichirankyo1.or.jp/ "><em>卵1</em>
(B) BYwBw',null,event)" href="
http://www.nichirankyo2.or.jp/ ">日本<em>卵2</em>
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)"">[^<]*<em>"); マッチさせたい範囲を明確にして欲しいな。特に、後ろの<em>以降もマッチさせる必要あるのかどうか。 こんなのでも確定出来るんじゃないの? System.Text.RegularExpressions.Regex.Matches(wk, @",null,event\)"" href=""(?<url>[^""]*)"); あと、スペース入る可能性あるところ全部に\s*を入れるのがセオリー。
>>965 ありがとうございます。出来ました!!!セオリーもありがとうございます。
[^<]* の解釈としては、
< 以外 の文字列が 0 回以上存在する
で良いでしょうか?
>>966 そうです。
>>961 の[^""]*も同様。
マッチを明確にすることが出来るので、常套手段です。
これでうまくいかないときだけ.*?を使います。
くどいようですが、まず最初に「確実に確定できるマッチ範囲」をしっかり決めた方が吉です。
ありがとうございます。修行します。
返されるデータを正規表現だけで全て抽出しようと試みてましたが 結構厳しそうです。 あらゆるパターンがあるので。 地道に文字列操作します。
【6月19日 AFP】大韓航空は18日、ケニアの人々が「原始的エネルギー」で満ちていると広告で表現したことを謝罪し、
ウェブサイトから広告を削除した。
ソウル・ナイロビ間の便を近日就航する予定の大韓航空は、そのPR広告で「大韓航空で飛び、アフリカの大いなるサバンナ、
サファリツアー、そして原始的エネルギーに満ちた先住民たちを楽しみましょう」と表現した。
あるケニア人はこうツイートしている。
「私の #原始的エネルギーを処理するために今日はライオン狩りとゾウいじめをしようと思う」
別のケニア人はこうツイートした。
「私は毎朝起床するために #原始的エネルギー を使っています」
数百件のツイートが集まったことを受け、大韓航空は、「ナイロビ便の最近の広告についてしかるべき確認を行っています。
この状況に対して心から謝罪いたします」と発表した。
以下省略
http://www.afpbb.com/article/economy/2885046/9141540
972 :
uy :2012/06/22(金) 14:33:13.43
進化しないよね、正規表現 機能が足り無すぎ
(?R) とかあるじゃん。
>>972 ^
$
(|)
[]
n
\
これで十分です
975 :
uy :2012/06/22(金) 17:29:25.46
そう思うなら君はそこで永久に成長止まれば良いわけで 正規表現って何年前に作られたもので何年間ろくに成長せずに止まってるんだよっていう 正規表現内にシンタックスシュガー入れないからいつまでたっても正規表現は見にくい 人間が書ける範囲を狭める
>>975 そう思うなら君が新たなる次世代型正規表現とやらを作ったらいかがかね?
>>972-975 さすがにこれは「お前らがそう思うんなら(ry」としか言いようがない
こちとらPerlとかRubyの最新版のマニュアル見てたら
\gだの\kだの\pだの今まで知らなかった拡張記法があって脳汁が溢れそうなんだがw
俺はuyのように全てを知り尽くしたわけじゃないから、
今後もこういった発見で楽しい思いをさせてもらうよ
>>975 シンタックスシュガーがほしいだけなの?
シンタックスシュガーがあれば人間がかける範囲が広がると思うのはちょっとどうかと
正規表現はマスターすれば バリデーションチェックとか速そうですね。 正規表現を考える時間に 文字列操作でバリデーションを作成した方が早かったりするので悩みますねん。
時間あるときに考えて、作って、速度比較してみたらいいよ。 たぶん今作ってるほうが速いよ
使えない人ってなぜか使わなくてよい理由を探して口にださないと済まないみたいだ。
ちょっと複雑になると途端に見にくくなるとか、プログラム側で分岐させるだけでスッキリする場合とか、 確かにそういうところがあるのは否定出来ない。 そういえば否定もちょっとめんどい。
>>981 でもある言語の同じレベルのプログラマ達の中で、使える人と使えない人が
くっきり分かれてしまうのは問題だと思いませんか。
>>980 物にもよるかと思いますが
プログラムでロジックを組んだ方が開発時間が短縮出来る気がしてます。
確かに誰でも使いやすい道具になるのは正しいこと。
俺だって昔はなんだこりゃと思った時期もあったし、
それを忘れてこんなの出来ないのかよと言うのはただの傲慢かと思う。
でも、そんなに難しくないから理解すると楽できるとこがありますよ。
>>982 否定は誰かが構文作ってくれるに違いない。あれは人がやる仕事じゃない。
986 :
uy :2012/06/22(金) 20:05:54.52
>>978 そこからか?
アセンブラで作れる範囲のプログラムと
C#で作れる範囲のプログラム
理論上は作れるとかいうボケいらないよ?
987 :
uy :2012/06/22(金) 21:59:25.71
str = "12345678" str.scan(/\d{1,3}/) {|m| p m } は "123" "456" "78" と表示されるけどこれを "12" "345" "678" にしたんだけどどうやんの??
>>984 うん、ものによるのは確かにそうで、ある程度複雑になった場合は、
正規表現のほうが明快かつ速度も優れる場合があると思う。
逆に、ある程度単純な場合は正規表現を使わないほうが速いことが多い。
>>981 使うな厨だといいたいのかな。
>>986 C#がアセンブラのシンタックスシュガーであるという大ボケを見せてくれてるの?
989 :
uy :2012/06/22(金) 22:20:46.61
>C#がアセンブラのシンタックスシュガーであるという大ボケを見せてくれてるの? おい アセンブラで3Dゲー作れ
>>989 その前に答えてよ。
C#ってアセンブラのシンタックスシュガーなの?
991 :
uy :2012/06/22(金) 23:21:59.97
(?:.*\n{2}).* の書き込みをする人にイラッ☆
>>987 reverseしておいてそれやって、reverse
ふつう、言語そのものを、低水準言語のシンタックスシュガーとは言わないような。
996 :
デフォルトの名無しさん :2012/06/23(土) 01:00:58.28
ラクダ本4版の正規表現の章は100ページ近くあって軽くひきつけを起こした
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。