トップページ⇒tech
1001コメント310KB

正規表現 Part9

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2011/12/11(日) 10:19:30.25
正規表現(Regular Expression)スレです。

質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。

正規表現 Part8
http://hibari.2ch.net/test/read.cgi/tech/1301067486/
0002デフォルトの名無しさん2011/12/11(日) 10:19:38.70


犬猫子供を出せば、馬鹿は見るだろ?
 某テレビ局在日社員

0003デフォルトの名無しさん2011/12/11(日) 10:19:56.63
◆関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/
正規表現パズル
http://www.geocities.jp/oraclesqlpuzzle/regex/
詳説 正規表現
http://www.oreilly.co.jp/books/4873111307/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
JScript 正規表現の概説
http://msdn.microsoft.com/library/ja/script56/html/js56reconIntroductionToRegularExpressions.asp
.NET Framework 正規表現言語要素
http://msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp
【 初心者 】 正規表現 【 入門 】
http://funcchan.blog16.fc2.com/
0004デフォルトの名無しさん2011/12/11(日) 10:20:14.78
◆関連スレ
[UNIX板] 正規表現
http://pc12.2ch.net/test/read.cgi/unix/1039165754/
[WebProg] 正規表現道場
http://pc11.2ch.net/test/read.cgi/php/1168450843/

◆前スレ
[1] http://pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] http://pc8.2ch.net/test/read.cgi/tech/1131028296/
[3] http://pc11.2ch.net/test/read.cgi/tech/1156413899/
[4] http://pc11.2ch.net/test/read.cgi/tech/1186030400/
[5] http://pc12.2ch.net/test/read.cgi/tech/1212498448/
[6] http://pc12.2ch.net/test/read.cgi/tech/1241537764/
[7] http://hibari.2ch.net/test/read.cgi/tech/1268979408/
[8] http://hibari.2ch.net/test/read.cgi/tech/1301067486/
0005デフォルトの名無しさん2011/12/11(日) 10:20:30.40
スルーされにくい質問のテンプレと例

●正規表現の使用環境
Java1.5

●検索か置換か?
検索

●説明
各行の1番目のAまでを検索したい

●対象データ
ABCA
BCAA
CABA

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
0006デフォルトの名無しさん2011/12/11(日) 17:26:51.35
^.*?A
0007デフォルトの名無しさん2011/12/11(日) 20:38:47.00
>>6
どうした?
0008デフォルトの名無しさん2011/12/11(日) 20:47:52.13
ただの5に対する解答例なんじゃないの
0009デフォルトの名無しさん2011/12/11(日) 21:33:05.40
つか

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^

これわかりにくいだろ
アンダーラインのつもりだったのかよ
0010デフォルトの名無しさん2011/12/11(日) 21:41:11.54
アンダーラインのつもりであることはわかるだろ。
0011デフォルトの名無しさん2011/12/11(日) 22:20:26.34
^^;
00128512011/12/11(日) 23:27:56.52
>>939
perlのオプションが2種類あることを知らないで適当書いてしまいました、申し訳ない..

>>998
ご指摘ありがとうございました
0013デフォルトの名無しさん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で他にもこの機能を持った関数はあるのでしょうか?
マルチバイトの関数でこの機能があれば有り難いのですが、なんかないですよね?
0014デフォルトの名無しさん2011/12/12(月) 19:01:14.89
ググれ
0015デフォルトの名無しさん2011/12/14(水) 02:34:01.67
性器表現
0016デフォルトの名無しさん2011/12/14(水) 03:36:16.77
>>13
このスレに常駐してる奴にそんなこと分かるわけないだろ。
0017デフォルトの名無しさん2011/12/14(水) 11:36:40.54
PHPはmb系列は鬼車なんだね。PCREしか使わないから知らなかった。
0018デフォルトの名無しさん2011/12/15(木) 03:38:33.31
>>12
鬼車の再帰の作り方教えて
0019デフォルトの名無しさん2011/12/15(木) 04:33:00.06
>>18
鬼車のマニュアル: http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
技評の記事(3ページ目): http://gihyo.jp/dev/serial/01/ruby/0006
0020デフォルトの名無しさん2011/12/15(木) 10:03:14.98
日本語で書かれたサイトはないの?
0021デフォルトの名無しさん2011/12/15(木) 10:10:23.05
>>20
>19はどちらも日本語だと思うが。
0022デフォルトの名無しさん2011/12/16(金) 05:45:43.65
なるほど、pcreの再帰は使い勝手悪いけど鬼車の再帰は使い易い。確かに鬼車なら簡単に書けますね。
括弧の数を数えるコードを書くほうが効率悪いかも。
0023デフォルトの名無しさん2011/12/16(金) 10:16:24.49
以下の正規表現でよろしいでしょうか?
ご意見を頂ければ幸いです。

/(-1)|^[\d]+/

●正規表現の使用環境
PHP Version 5.1.6

●検索か置換か?
検索

●説明
金額の数値チェックですが、
負の数である-1のみ入力を許可します。
0は許可します。
-1, 0, 1, 2, ..., 10, ..., 100,

●対象データ
数値(金額)

●希望する結果
× -10
…
× -2
○ -1
○ 0
…
○ 10
○ 11
0024デフォルトの名無しさん2011/12/16(金) 10:32:32.30
>>23
\A(?:-1|0|[1-9]\d*)\z

○0
×00
×000
0025デフォルトの名無しさん2011/12/16(金) 20:06:59.35
>>23
数値をなぜわざわざ正規表現でチェックするの?
0026デフォルトの名無しさん2011/12/16(金) 21:21:23.51
>>25
その方がif文より速い、と思い込んでるんだろうね
0027デフォルトの名無しさん2011/12/17(土) 02:17:24.29
あー、そうか、単純にif文で文字列比較すればいいのか…
0028デフォルトの名無しさん2011/12/17(土) 03:08:04.31
●正規表現の使用環境 windows google chrome
●言語JavaScript
●置換


●説明
以前このスレで教えてもらった表現が仕様変更で使えなくなったので再び尋ねにきました
以下のようにURLを置換する正規表現を教えてください

http://*.bp.blogspot.com/*/*/*/*/s*/*
↓
http://*.bp.blogspot.com/*/*/*/*/s2048/*


.replace(/^(http:\/\/[^/]+\.bp\.blogspot\.com\/(?:[^/]+\/){4)[^/]+\/([^/]+)$/i,"$s2048")
0029デフォルトの名無しさん2011/12/17(土) 03:15:29.42
\sとホワイトスペースとされている[ \n\r\t\v\f]を比べたら違っていた。
\sには\vが含まれてない。
ホワイトスペースは明示的に指定した方が良いな。
0030292011/12/17(土) 03:30:16.80
>>29はPHPの最新版。
実際には\vが出てくる機会は無いんだろうけど。
万が一使われて不具合でる場合に、速度犠牲にしても明示的な指定が良いことはある。
0031デフォルトの名無しさん2011/12/17(土) 03:38:09.84
>>28は自力で分かりましたので撤回します。
0032デフォルトの名無しさん2011/12/17(土) 09:11:00.48
>>27
数値比較だろうがw
0033デフォルトの名無しさん2011/12/17(土) 09:45:46.47

要件でのチェック処理はjavascriptでした。
改修前のソースが正規表現で書かれていたので、そこに固執していました。
ありがとうございます。

var num; // 画面からの入力
if ( num >= -1) {
  // 入力値OK
} else {
  // 入力値NG
}
0034デフォルトの名無しさん2011/12/17(土) 11:29:20.09
文字が入力されたらどうするんだよ。
0035デフォルトの名無しさん2011/12/17(土) 11:32:37.06
>>34

>●対象データ
>数値(金額)
0036デフォルトの名無しさん2011/12/17(土) 11:46:23.91
1,000,000の点は考えなくていいのかな?
0037デフォルトの名無しさん2011/12/17(土) 11:47:32.58
桁区切りのカンマ、小数点は入力時にエラーとして再入力を促します。
0038デフォルトの名無しさん2011/12/17(土) 12:14:41.04
それなら楽勝だね、お疲れ。
0039デフォルトの名無しさん2011/12/17(土) 12:34:48.56
>>37
変換(削除)してやれよ、それくらい。
0040デフォルトの名無しさん2011/12/17(土) 14:52:29.17
それは外部者が言うことじゃない。
0041デフォルトの名無しさん2011/12/19(月) 22:11:17.71
●正規表現の使用環境
c#

●検索か置換か?
検索

●説明
一番長い数字の連続を検索したいです

●対象データ
hogehoge120_hoge001218hoge1

●希望する結果
001218
0042デフォルトの名無しさん2011/12/19(月) 22:18:10.47
\d+で数字列検索してプログラム使って最長判定
正規表現だけじゃ無理
0043デフォルトの名無しさん2011/12/19(月) 23:00:23.94
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);
0044デフォルトの名無しさん2011/12/19(月) 23:10:12.46
>>42-43 ありがとん
やってみます。
0045デフォルトの名無しさん2011/12/20(火) 03:52:43.40
人に利用される馬鹿が教えてくれるスレ
0046デフォルトの名無しさん2011/12/22(木) 09:07:36.05
すみません。正規表現の

^\sd{4}$

とはどういう意味を表しているのでしょうか?
0047デフォルトの名無しさん2011/12/22(木) 09:10:41.34
行頭があって空白文字があってdが4つあって行末
0048デフォルトの名無しさん2011/12/22(木) 09:14:41.46
>>47
ありがとうございます。
ということは
[ 1234]
のような値でしょうか?
0049デフォルトの名無しさん2011/12/22(木) 09:16:04.63
なぜd だけ そのままなのww
0050デフォルトの名無しさん2011/12/22(木) 09:25:03.64
>>48
0-9のどれか1文字なら d じゃなくて \d
テンプレのリンクから一番やさしそうなの見つけて読んで
0051デフォルトの名無しさん2011/12/22(木) 09:27:26.26
>>48
そういうのを「思い込み」と言う
0052デフォルトの名無しさん2011/12/22(木) 09:33:46.25
>>50
ありがとうございます。
ということは
[ dddd]
なんですね。ということはこれはバグのような・・
0053デフォルトの名無しさん2011/12/22(木) 10:22:43.30
ばっかじゃないの。
0054デフォルトの名無しさん2011/12/22(木) 10:29:57.87
試してみました。[ 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
0055デフォルトの名無しさん2011/12/22(木) 10:36:57.01
頭がバグってきた
0056デフォルトの名無しさん2011/12/22(木) 10:40:21.24
試すだけなら
print "hit!" if (" dddd" =~ /^\sd{4}$/);
で十分。
べーしっくは大変ですなw
0057デフォルトの名無しさん2011/12/22(木) 14:46:34.31
すぽぽーん!!
0058デフォルトの名無しさん2011/12/22(木) 15:04:10.77
マッチって言おうぜ、ヒットって野球かよ。
0059デフォルトの名無しさん2011/12/22(木) 15:21:10.19
>>58
マッチしてるんだからヒットで良くね?
0060デフォルトの名無しさん2011/12/22(木) 17:07:10.08
トシちゃんでも何でもいいよ
0061デフォルトの名無しさん2011/12/22(木) 21:51:46.32
こんばんわ、膝方 歳三です。


呼んだ?
0062デフォルトの名無しさん2011/12/22(木) 23:34:54.98
ナウなヤングが多いスレですね
0063デフォルトの名無しさん2011/12/24(土) 03:42:49.26
ヒットじゃなくて三振だな
0064デフォルトの名無しさん2011/12/28(水) 12:07:44.21
鬼車使用

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>は実際にはタブに置き換え

と、したいのですがどのようにすれば正規表現で置換する出来ますか?
"・"の数がまちまちなのと、行全体は残しつつ次の行に分割することが出来ず悩んでいます
0065デフォルトの名無しさん2011/12/28(水) 12:38:02.35
>行全体は残しつつ
行全体を同じ物で置換
0066デフォルトの名無しさん2011/12/28(水) 12:45:21.06
>>64
鬼車に置換機能はないというのはおいとくとして、
数が不定という点で正規表現だけではどうにもならんな。
$1とかで取り出す以上、上限を決めるとかしないと。
0067デフォルトの名無しさん2011/12/28(水) 13:23:02.79
>>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
,ソレ・ナンテ
,エロ
,ゲ

//ここまで
0068デフォルトの名無しさん2011/12/28(水) 13:50:26.35
^([^,]+,([^・\t]+)・([^・\t]+)(?:・([^・\t]+))?\t.+)$
0069デフォルトの名無しさん2011/12/28(水) 14:31:25.37
>>68
希望通りの分割が出来ました
良く分からない所があるのですがもう一度解説している所を読んで理解したいと思います
有難うございました
0070デフォルトの名無しさん2011/12/28(水) 23:11:31.85
 [^・\t

顔文字に見えた。
堅め開けた、しわくちゃの老人
0071デフォルトの名無しさん2011/12/29(木) 22:53:43.17
正規表現を使って、@マークが先頭にある半角数字に処理をかけたいと思っています。
ex.) @12345

ただ、データの中に「<a href=”〜”>@12345</a>」のようにHTMLタグのリンクタグが付与している場合があり、その場合でもマッチするようにしたいです。
「<a href=”〜”>@〜</a>」でも「@〜」でもマッチするようにするにはどうすればいいのでしょうか?
0072デフォルトの名無しさん2011/12/29(木) 23:27:18.01
<a href="[^"]+">@\d+</a>|@\d+

こういうことかな?

いまいち質問がわかりづらい
次に質問するときはテンプレつかってくれ
0073デフォルトの名無しさん2011/12/29(木) 23:34:40.12
鬼車なんてあったんだ隠語かと思ったら正式名称か
0074デフォルトの名無しさん2011/12/30(金) 00:43:50.80
>>71
@\d+ でいずれもマッチするが、簡単すぎてどこで躓いているのかよくわからん
0075デフォルトの名無しさん2011/12/30(金) 01:01:46.87
>>74
先頭じゃない場合もあるからじゃない?
0076デフォルトの名無しさん2011/12/30(金) 01:02:54.62
ごめん行頭と読み違えた
0077デフォルトの名無しさん2011/12/30(金) 06:36:35.31
>>73
このスレにいてRuby 1.9に使われてる正規表現エンジンの名前を知らんとはな。

スレのテンプレに、主要な正規表現ライブラリの紹介があってもいいかもしれない。
0078デフォルトの名無しさん2011/12/30(金) 10:08:17.68
>>77
そんなのべたべた貼っても読まねぇ
0079デフォルトの名無しさん2011/12/30(金) 20:39:29.00
正規表現のエンジンも色々あるからな
だからこそ環境書けと言われるワケで
逆に環境以上のことは蛇足じゃねーの
0080デフォルトの名無しさん2011/12/30(金) 20:46:28.60
質問用テンプレということではないのだが。
0081デフォルトの名無しさん2011/12/30(金) 21:57:21.07
このスレのレベルの低さは前スレ見れば分かる。回帰も知らないゴミの集まり。
0082デフォルトの名無しさん2011/12/30(金) 22:00:14.08
>>72
無事希望通りなものができました。
また質問が出たときはテンプレ使って質問しようと思います。
ありがとうございました。
0083デフォルトの名無しさん2011/12/30(金) 22:07:07.87
●検索か置換か?
置換

●説明
reverse関数のように、文字を逆順にする
対象は半角のみで、全角は使わないので考慮しないで構わない

●対象データ
114514
810snpi
go

●希望する結果
415411
ipns018
og
0084デフォルトの名無しさん2011/12/30(金) 23:18:54.38
つreverse関数
0085デフォルトの名無しさん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);
↑そこでそういうプログラムを組んでみたのですが正規表現の部分でエラーが発生してコンパイルエラーになってしまいます。
正しくプログラムするにはどうしたらいいでしょうか?
0086片山博文MZ ◆0lBZNi.Q7evd 2011/12/31(土) 14:31:08.49
"href=\"(http://\S)\""はリテラル文字列だろ?
"href=\"(http://\\S)\""が正しい。
0087デフォルトの名無しさん2011/12/31(土) 14:32:06.62
\\
0088片山博文MZ ◆0lBZNi.Q7evd 2011/12/31(土) 14:32:19.57
間違えた。
"href=\"(http://\\S+)\""
0089デフォルトの名無しさん2011/12/31(土) 14:44:16.90
urlを抽出する際に、httpsを考慮する必要はありませんか。
0090片山博文MZ ◆0lBZNi.Q7evd 2011/12/31(土) 14:47:23.37
(https?://\\S+)
そこまで考えるなら、パーサのHTML Tidyを使う。
0091852011/12/31(土) 14:57:57.85
みなさんアドバイスありがとうございます。
\をもう一つ付けることでコンパイルに無事成功しましたm(_ _)m
0092片山博文MZ ◆0lBZNi.Q7evd 2011/12/31(土) 15:23:43.32
+もつけないとマッチしないよ。。。
0093デフォルトの名無しさん2011/12/31(土) 16:03:03.63
\Sを使うこと自体間違ってる。誤爆の可能性あるよ。
0094デフォルトの名無しさん2012/01/01(日) 01:25:06.56
つうかC#なら@""使え
0095デフォルトの名無しさん2012/01/01(日) 03:21:35.01
そういや@""の中で"を使うにはどうしたらいいんだろう?
0096 【大凶】 【85円】 2012/01/01(日) 08:55:00.69
エスケープできないの?
記号としての\を使いたい場合、\\になるように、
\"とかが用意されているのでは。
0097デフォルトの名無しさん2012/01/01(日) 09:38:04.03
@"printf(""hello"")" みたいに " を二回続ける(スレチ)
0098デフォルトの名無しさん2012/01/01(日) 15:31:57.27
詳細正規表現って本5040円もするけど安く手に入れられないかな。
0099デフォルトの名無しさん2012/01/01(日) 15:41:01.14
>>98
アマゾンに\4,000(送料別)の中古があったよ
0100デフォルトの名無しさん2012/01/01(日) 16:58:17.25
>>99
ありがとうです。でもまだ高いorz
0101デフォルトの名無しさん2012/01/01(日) 17:24:17.39
●正規表現の使用環境
C#

●検索か置換か?
置換

●説明
文字列の先頭の部分のカッコを消したい

●対象データ
(hoge)あいうえお

●希望する結果
hogeあいうえお

よろしくお願いします
0102デフォルトの名無しさん2012/01/01(日) 17:27:41.94
^\((.*?)\)(.*)
\1\2
0103デフォルトの名無しさん2012/01/01(日) 22:40:14.79
あけましておめでとう

●正規表現の使用環境
perl5

●検索か置換か?
置換

●説明
全角,句読点と半角の間を消したい
半角と半角は無視
●対象データ
みんなの憧れ Justin Drew Bieber が大好き
私だけの Justin が欲しい
やっぱ Bieber 、Bieber って響きがいいよね

●希望する結果
みんなの憧れJustin Drew Bieberが大好き
私だけのJustinが欲しい
やっぱBieber、Bieberって響きがいいよね


今までは([ぁ-煕]+)と([0-9A-Za-z]+)を組み合わせて何回もやっていたのですが
例題の1行目の様な物が煩わしいので一括に処理したいです
お願いします
0104デフォルトの名無しさん2012/01/01(日) 22:58:24.51
[ ]*([ぁ-煕]+)[ ]*
↓
\1
0105デフォルトの名無しさん2012/01/01(日) 23:11:50.26
>104
ご回答ありがとうございます
しかし、それでは全角と半角の間以外のスペースも消えてしまうので
想定した動きと違います。ごめんなさい。
0106デフォルトの名無しさん2012/01/01(日) 23:38:06.31
[ぁ-煕]ってUnicodeだと使えないがいいんかな。
0107デフォルトの名無しさん2012/01/02(月) 13:39:42.23
文字列「犬」と「猫」を含む一行を検索するときは

(犬.*猫)|(猫.*犬)

と書けばいいですよね
では、文字列「犬」と「猫」と「鳥」と「牛」の全てを含む一行を検索する場合はどのように書けばいいのでしょうか?
0108デフォルトの名無しさん2012/01/02(月) 13:56:54.73
if文使うのが計算量少ないと思う。
正規表現だけは諦めて。
0109デフォルトの名無しさん2012/01/02(月) 14:02:57.11
このように一つでも見つからなければFALSEを返す関数。

A=array("犬", "猫", "鳥", "牛");

function hantei(str) {
for(n=0; n<count(A); n++) if(str.find(A[n])==FALSE) return FALSE;
return TRUE; }
0110デフォルトの名無しさん2012/01/02(月) 14:07:39.08
(?=.*犬)(?=.*猫)(?=.*鳥)(?=.*牛)
01111042012/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])])

とりあえず個々には動作してるように見えるのですが、これをひとつに纏めつつ
「全 半 全」「全 半 半 全」「全 半全」「全半 全」を満たすように書き換えたいのですがそれがわかりません…
0112デフォルトの名無しさん2012/01/02(月) 14:52:30.99
日本語のコードは正規表現で使わない方が良い。
検索対象の文字コードに依存する。
ASCIIだけの特徴を使って検索するのが、仕様変更などにも対応できる可能性。
01131122012/01/02(月) 15:03:03.29
こんなのやってみたが。消しきれず。

[  ]*(([0-9A-Za-z]+ ?){1,})[  ]*
\1
01141122012/01/02(月) 15:05:57.04
英文とその前後の空白にヒットさせるという方法だが、終わりの空白が取り除けない。
0115デフォルトの名無しさん2012/01/02(月) 15:09:47.82
ほらよ

(犬.*猫.*鳥.*牛)|(犬.*猫.*牛.*鳥)|(犬.*鳥.*猫.*牛)|(犬.*鳥.*牛.*猫)|(犬.*牛.*猫.*鳥)|(犬.*牛.*鳥.*猫)|
01161122012/01/02(月) 15:11:27.97
これで例文はできた。

[  ]*(([0-9A-Za-z]+ ){0,}[0-9A-Za-z]+)[  ]*

\1
0117デフォルトの名無しさん2012/01/02(月) 15:32:48.77
頭に犬が来ない場合はどうするのかと
0118デフォルトの名無しさん2012/01/02(月) 15:46:13.41
>>117
最後が|だから、これからシリーズでUpしてくれるよ
0119デフォルトの名無しさん2012/01/02(月) 15:58:19.28
24通り書く気かよw
十二支の場合はどうする気だよww
0120デフォルトの名無しさん2012/01/02(月) 16:03:10.71
ループでそとつヒットしなかったら探索終了が速いって。
正規表現で全パターンは負荷かかりすぎ。
0121デフォルトの名無しさん2012/01/02(月) 16:11:59.61
逆に、

^((?!犬).)*$|^((?!猫).)*$|^((?!馬).)*$|^((?!鳥).)*$

を削除すれば
0122デフォルトの名無しさん2012/01/02(月) 16:18:48.97
(?:犬(?:(猫)?鳥牛(?(1)|猫)|(鳥)?猫牛(?(2)|鳥)|牛(?:猫鳥|鳥猫))|猫(?:(鳥)?牛犬(?(3)|鳥)|(牛)?鳥犬(?(4)|牛)|犬(?:鳥牛|牛鳥))|鳥(?:(牛)?犬猫(?(5)|牛)|(犬)?牛猫(?(6)|犬)|猫(?:牛犬|犬牛))|牛(?:(犬)?猫鳥(?(7)|犬)|(猫)?犬鳥(?(8)|猫)|鳥(?:犬猫|猫犬)))
0123デフォルトの名無しさん2012/01/02(月) 16:21:22.32
どう見ても京都猛禽類研究所です。本当にありがとうございました
01241222012/01/02(月) 16:28:08.70
ごめん、質問をちゃんと見てなかったわ
これでおk
長すぎるって怒られたから改行しといた

(?:犬.*(?:(猫)?.*鳥.*牛.*(?(1)|猫)|(鳥)?.*猫.*牛.*(?(2)|鳥)|牛.*(?:猫.*鳥|鳥.*猫))|
猫.*(?:(鳥)?.*牛.*犬.*(?(3)|鳥)|(牛)?.*鳥.*犬.*(?(4)|牛)|犬.*(?:鳥.*牛|牛.*鳥))|
鳥.*(?:(牛)?.*犬.*猫.*(?(5)|牛)|(犬)?.*牛.*猫.*(?(6)|犬)|猫.*(?:牛.*犬|犬.*牛))|
牛.*(?:(犬)?.*猫.*鳥.*(?(7)|犬)|(猫)?.*犬.*鳥.*(?(8)|猫)|鳥.*(?:犬.*猫|猫.*犬)))
0125デフォルトの名無しさん2012/01/02(月) 16:28:52.24
先読み使えるなら>>110でいいじゃん
0126デフォルトの名無しさん2012/01/02(月) 16:29:46.90
>>116
試してみたのですが 「aaaaa - aaaaaa」 や 「aa aaaa」なども消えてしまいます
全角と半角の間のスペースを消すだけなので、例題に載せなかったのがいけなかったのかもしれません。
>104を正規表現で表現するのは難しいのでしょうか?
環境は多分utf-8なので条件依存していても構わないのですが。
01271262012/01/02(月) 16:31:28.71
>104を正規表現で表現するのは難しいのでしょうか?
↓
>103を正規表現で表現するのは難しいのでしょうか?
に修正します。すみません
0128デフォルトの名無しさん2012/01/02(月) 16:33:40.56
>>126
>しかし、それでは全角と半角の間以外のスペースも消えてしまうので
例えばどういうの?サンプルが少なすぎる
0129デフォルトの名無しさん2012/01/02(月) 16:36:55.88
十二支の方が簡単そうじゃね
子・丑・寅・卯・辰・巳・午・未・申・酉・戌・亥だろ?

あまり使われなさそうな文字列をピンポイントで検索するとか

 → (戌.*亥)|(亥.*戌)

又は

 → (猪.*亥)|(亥.*猪)

とりあえず上のように検索してダメだったら別の文字列を変えればいい
0130デフォルトの名無しさん2012/01/02(月) 16:38:57.88
>>126
半角の英文と見なす記号・文字を追加。これは-の場合。

[  ]*(([0-9A-Za-z\-]+ ){0,}[0-9A-Za-z\-]+)[  ]*
01311292012/01/02(月) 16:40:57.27
ちがうちがう

 → (戌.*亥)|(亥.*戌)

又は

 → (戌.*猪)|(猪.*戌)

だな
猪を二頭探してどうする俺w
0132デフォルトの名無しさん2012/01/02(月) 16:47:50.36
 全[space] → 全
 [space]全 → 全

の2回に分けるのじゃだめ?
0133デフォルトの名無しさん2012/01/02(月) 16:49:53.21
英文か、全角日本語しかないんだろ。
英文とその前後の空白を特定できれば済むんだよ。
0134デフォルトの名無しさん2012/01/02(月) 16:59:35.64
>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ですよね。それしか無いでしょうか
0135デフォルトの名無しさん2012/01/02(月) 17:02:25.21
スペース一個抜けてましたこっちです

<元>
みんなの憧れ 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...
0136デフォルトの名無しさん2012/01/02(月) 17:06:20.63
>>125
先読みが使えない場合はどうするの?
0137デフォルトの名無しさん2012/01/02(月) 17:10:05.43
[  ]*(([0-9A-Za-z\-:\.]+ ){0,}[0-9A-Za-z\-:\.]+)[  ]*
0138デフォルトの名無しさん2012/01/02(月) 17:27:57.62
>137
この行のスペース2個は難しそうですか?
身も心も Justin Drew Bieber の物。
0139デフォルトの名無しさん2012/01/02(月) 17:46:05.19
どこにspace2個あるんだよ?
0140デフォルトの名無しさん2012/01/02(月) 17:46:15.19
>>111
どっから持ってきたかは知らんが、>>112も書いてるようにやめた方がよい。
せめて \p{ASCII} みたいな文字プロパティにすべき。
0141デフォルトの名無しさん2012/01/02(月) 17:47:48.27
>>136
24通り並べる。
0142デフォルトの名無しさん2012/01/02(月) 17:56:32.09
>>136,141
>>124
0143デフォルトの名無しさん2012/01/02(月) 18:44:47.04
>>124は24通り全部並べる代わりに条件分岐使ってまとめてあるだけだが、
やってることは変わらないし、条件分岐使える環境なら先読みも使えるはず。
0144デフォルトの名無しさん2012/01/02(月) 19:17:53.99
結論:先読み検索できる環境にデータごと移行させろ
0145デフォルトの名無しさん2012/01/02(月) 20:53:33.35
「出資者は無理難題をおっしゃる」

データ加工に便利な環境に移せるなら、それも手ですね。
0146デフォルトの名無しさん2012/01/02(月) 21:38:31.49
>>139
2chだとわからなくなっちゃうのでしょうか。わかりにくくてすいません
身も心も Justin[][]Drew Bieber の物。
コピペすると分かるのですがここに2個スペース入っていました。
スペースが2個あると消えてしまうようでしたが事前にスペース2個を1個に変換することにします
毎日使っているものなので大切に活用させて頂きます。有難うございます
0147デフォルトの名無しさん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
のようにコードを書いてみたのですが、どうもうまくいきません。
どのように記述すればいいのでしょうか?
0148デフォルトの名無しさん2012/01/03(火) 00:33:34.83
それ本当は「2つのデータにマッチ」が目的じゃないだろ
テンプレ使うならちゃんと希望する結果まで書けよ
0149デフォルトの名無しさん2012/01/03(火) 00:39:11.64
<a href=”http://〜\.hogehoge\.com/〜/”>〜</a>|<a http://〜\.hogehoge\.com/>〜</a>

これでどちらのデータにもマッチする
0150デフォルトの名無しさん2012/01/03(火) 00:41:21.84
>>147
やりたいのはこういうこと?
/<a href="http:\/\/.*\.hogehoge\.com\/(.+\/)?".*<\/a>/
0151てすすき2012/01/03(火) 00:55:19.17
●JavaScriptかPHP(なければなんでも)
●置換
●現在パターンにマッチしている回数(試行回数でも)を置換後に埋め込むことできましたっけ?
●あいうあいうあいう・・・
●1あいう2あいう3あいう・・・
0152デフォルトの名無しさん2012/01/03(火) 03:33:11.94
var count = 0;
var callback = function(x) {
return (++count) + x;
};
"あいうあいうあいう".replace(/あいう/g, callback);
0153てすすき2012/01/03(火) 09:44:43.57
>>152
ありがとうございます
あコールバックありましたねphpも探したらありそう
正規表現だけだと無理ですよね
01541472012/01/03(火) 10:58:55.34
>>148
すんません。その通りです。

HTMLページ内の「<a href="http://mag.hogehoge.com/sky/">ほげほげ</a>」(※1)というようなタグを「mag,sky,ほげほげ」のようにデータを置換したいんです。

その過程の中で、「<a href="http://mos.hogehoge.com/">もげもげ</a>」というドメイン以下のフォルダ名がないものがあったので、どうしようかと思ったのです。
とりあえずデータ訂正は後で行うので、これも(※1)と同じように置換するにはどうすればいいのでしょうか。
0155デフォルトの名無しさん2012/01/03(火) 12:17:33.31
>>154
/<a href=\"http:\/\/(.+)\.hogehoge\.com\/(.*)\/?\">(.*)<\/a>/

置換したい文字列を"$1,$2,$3"とかにすれば
上は mag,sky,ほげほげ
下は mos,,もげもげ
みたいに置換されるんじゃないかな。
01561472012/01/03(火) 13:51:54.18
>>155
/<a href=\"http:\/\/(.+)\.hogehoge\.com\/(.*?)\/?\">(.*)<\/a>/

と記述したところ
>上は mag,sky,ほげほげ
>下は mos,,もげもげ

と動くようになりました。
ありがとうございました。本当感謝です。
0157デフォルトの名無しさん2012/01/08(日) 07:32:21.97
●正規表現の使用環境
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/
0158デフォルトの名無しさん2012/01/08(日) 10:06:40.16
>>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);
?>
0159デフォルトの名無しさん2012/01/10(火) 17:55:27.75
●正規表現の使用環境
テキスト

●検索か置換か?
置換

●説明
文章内の指定した数の改行毎に、行を一段開けたい。
下記例文なら改行三つごとに行を一段開けたい。

●対象データ
(例文)
人は誰しも初体験にはほろ苦く、甘酸っぱい思い出があるものだが、人生の諸先輩方はどんな童貞喪失体験をしたのか?
「シリーズ初体験」−−現在70歳の会社役員(兵庫県)が当時の思い出を語った。
中学2年の時、国語の女教師に「勉強を教えてあげるから家においで」といわれ、夏休みに入ってすぐに先生の家を訪れました。
教師になって3年目、美人ではないけれど、私にとっては優しいお姉さんのような存在でした。
何人かいるのかなと思ったんですが、先生の家に行くと私の他は誰もいませんでした。
勉強を教わり、夕食をご馳走になり、その日は泊めてもらいました。
夜中、下半身がもぞもぞするので目が覚めると、先生が私の浴衣の裾を広げていました。

●希望する結果
人は誰しも初体験にはほろ苦く、甘酸っぱい思い出があるものだが、人生の諸先輩方はどんな童貞喪失体験をしたのか?
「シリーズ初体験」−−現在70歳の会社役員(兵庫県)が当時の思い出を語った。
中学2年の時、国語の女教師に「勉強を教えてあげるから家においで」といわれ、夏休みに入ってすぐに先生の家を訪れました。

教師になって3年目、美人ではないけれど、私にとっては優しいお姉さんのような存在でした。
何人かいるのかなと思ったんですが、先生の家に行くと私の他は誰もいませんでした。
勉強を教わり、夕食をご馳走になり、その日は泊めてもらいました。

夜中、下半身がもぞもぞするので目が覚めると、先生が私の浴衣の裾を広げていました。
-------------------------
よろしくお願いします。
0160デフォルトの名無しさん2012/01/10(火) 20:28:17.52
.*\n.*\n.*\n

\0\n
0161デフォルトの名無しさん2012/01/10(火) 21:41:34.61
\0でマッチした部分全部を参照できる環境があるのか
後学のために環境名をおしえてくれ
0162デフォルトの名無しさん2012/01/10(火) 21:57:34.29
>>161
結構あるから困る
0163デフォルトの名無しさん2012/01/10(火) 23:16:46.84
>>160
ありがとう。○┓
0164デフォルトの名無しさん2012/01/11(水) 11:52:22.67
>>161
できないほうをおしえろ。
0165デフォルトの名無しさん2012/01/11(水) 12:10:54.85
たとえばPHP使うとマッチ全体がゼロ番目に入ることがprint_r使うと分かるが。
0166デフォルトの名無しさん2012/01/11(水) 12:38:37.57
>>164
perl
0167デフォルトの名無しさん2012/01/11(水) 12:45:30.05
あとpythonもかな。
perl: $&、python: \g<0>
0168デフォルトの名無しさん2012/01/11(水) 12:56:35.50
>>160はこっちがいいということか。

(.*\n.*\n.*\n)

\1\n
0169デフォルトの名無しさん2012/01/11(水) 22:38:22.06
Emエディタでは、
.*\n.*\n.*\n
と
(.*\n){3}
ではマッチに差が出る。
これは正常なのか。
0170デフォルトの名無しさん2012/01/13(金) 23:05:20.51
文字列「ソース」を含む行を抽出したい
ただし「リソース」「ソース顔」などは弾きたい
この場合、どのように表記すればいいのでしょうか?

^ソース$
くらいしか思いつきませんでした
どなたかご教授お願いします
0171デフォルトの名無しさん2012/01/13(金) 23:40:00.44
質問があいまいで答えようがない
0172デフォルトの名無しさん2012/01/13(金) 23:45:53.00
>>170
完全には無理。
「ソースがおいしい」
という行があった時、それが「ソース顔の石井さん」という意味ならヒットしてはいけないし、
「ソースが美味しい」という意味なら、ヒットしてほしい。
正規表現だけで、完全に判別するのは不可能だ。
0173デフォルトの名無しさん2012/01/13(金) 23:50:49.78
>>171-172
レスありがとうございました
割り切るようにします

検索地獄から解放されて良かったです
0174デフォルトの名無しさん2012/01/14(土) 00:01:30.70
>>173
\bソース\b
とかどうでしょうか?

ちなみに\bは単語境界にマッチする幅0のメタ文字で、
上記はテキストエディタ等で単語検索とか
ワード検索とかよばれるものと等価です
0175デフォルトの名無しさん2012/01/14(土) 00:11:59.19
それは英語などでは有効な手法だけど、日本語の文章を対象にする場合ほとんど無意味
0176デフォルトの名無しさん2012/01/14(土) 00:23:27.79
形態素解析で下ごしらえが必要。
0177デフォルトの名無しさん2012/01/14(土) 00:53:57.14
「ソース」の前後がカタカナではない
「ソース」の後が漢字ではない

で手間は省けるか?でもどうかくのかな
0178デフォルトの名無しさん2012/01/14(土) 01:06:43.97
できないこともないんだけど、ソースの後が漢字ではないを指定できたとして、
「この料理をおいしく食べるためにはソース選びが重要」の「ソース」が排除されるよ。
0179デフォルトの名無しさん2012/01/14(土) 01:56:17.32
正規表現は日本語文字列には向かないからな
0180デフォルトの名無しさん2012/01/14(土) 03:35:58.90
正規表現がどうって話じゃないでしょ。
boxを抽出したいけどtreasure boxは弾きたいって言ってるようなもんでしょ。
0181デフォルトの名無しさん2012/01/14(土) 09:25:17.26
もし自分がやるとしたら、ソースの前後がカタカナではないという条件にするかな。それで大半はうまくいくはず。
ソース顔とかはヒットしてしまうが、後で結果を見直して、手動で消去する(手動が許されるなら)。

ただ、その場合、ソースコードとかトンカツソースとかも除去される。これはソースの意味だから除去したくないと
いうのであれば、難しいね。思いつく単語を別途ORで結んでヒットさせるという手もあるが、ウスターソースとか
ソースファイルとか、いくらでも思いつくし。

それか、たぶん>>170は調味料ではなくてプログラムのソースのことを指しているのだと思うので・・・。
検索元の文書がプログラミングに関する文書であって、トンカツソースとかの単語は入っていないのが明白であれば、
「リソース」を省かせるだけでも十分な気がする。その場合、
(?<!リ)ソース
または
^ソース|[^リ]ソース
でいける。

まあ、何のために検索したいかによるよね。ちょっと多少ゴミが混じってもいいというのなら上記のでいいと思うけど、
完璧にヒットさせたいと思うなら、正規表現では無理だ。
0182デフォルトの名無しさん2012/01/14(土) 12:08:57.43
>>180
日本語の場合分かち書きしないから単語境界も使えない、
というわけで、日本語は正規表現も含めて検索性が悪いよ。

getを検索してnuggetを弾くようなことも難しいわけ。
0183デフォルトの名無しさん2012/01/14(土) 12:16:39.74
>>180は単語境界が使える英語でさえ処理が難しいケースを挙げてるんだと思うよ
0184デフォルトの名無しさん2012/01/14(土) 12:21:19.98
英語でも難しいケースはあるが、英語の場合日本語よりは楽なので
「正規表現は日本語文字列には向かない」というのにはそれなりの妥当性がある
0185デフォルトの名無しさん2012/01/14(土) 13:33:31.04
C#.netで正規表現で文字列チェックするんだけど、
正規表現って、普通に1文字チェックするより高速なの?
0186デフォルトの名無しさん2012/01/14(土) 13:43:38.91
本当に速度がクリティカルに効いてくる状況ならちゃんと測定すべき。
そうでないなら実装しやすい方で。
0187デフォルトの名無しさん2012/01/14(土) 14:10:14.61
ソースファイルとか普通に使うよ
0188デフォルトの名無しさん2012/01/14(土) 14:35:46.57
>>186
馬鹿丸出しの質問にレスありがとう。
やっぱそうだよね、場合によるよね。

比較の記事とかネットにないかぐぐったけどなさげだったので質問してみました。
0189デフォルトの名無しさん2012/01/14(土) 16:52:35.86
実際自分でコード書くよりライブラリ使った方が
速いときが多いよね
コードの洗練さとかの関係で
0190デフォルトの名無しさん2012/01/14(土) 17:31:01.32
日本語は助詞でつなぐからな
英語だと半角スペースがあるので指定単語を抽出しやすい
0191デフォルトの名無しさん2012/01/14(土) 17:46:59.25
ここではきものを脱いでください

BGMによって着物か履物かわかれる。
0192デフォルトの名無しさん2012/01/14(土) 18:42:21.35
BGM?
0193デフォルトの名無しさん2012/01/14(土) 18:54:04.02
加トちゃんのBGMなら着物を脱ぐんじゃないの
0194デフォルトの名無しさん2012/01/14(土) 21:05:12.37
「一休さん」くらいの文言で良かったのに…
0195デフォルトの名無しさん2012/01/14(土) 21:07:37.14
このはしわたるべからず、ってやつ?
それはそうと>>191の例は超有名。BGMはシラネ
0196デフォルトの名無しさん2012/01/14(土) 21:30:16.88
木の葉皺たるべからず

木の葉は皺であるはずがない
0197デフォルトの名無しさん2012/01/15(日) 01:37:34.91
●正規表現の使用環境
秀丸エディタ
●検索か置換か?
置換
●説明
<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>
0198デフォルトの名無しさん2012/01/15(日) 01:42:24.89
<div class="main">(.*\n?)*?</div>

適当だけどこれでどうだろう
0199デフォルトの名無しさん2012/01/15(日) 01:51:11.62
>>198
うーむ、マッチしないみたいです。。
レスありがとうございます。
0200デフォルトの名無しさん2012/01/15(日) 02:51:10.19
([.\n]*?)
でもだめなのかな
0201デフォルトの名無しさん2012/01/15(日) 03:00:53.60
複数行にマッチさせる場合、正規表現に渡す行数を指定しないとだめ
http://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/190_CmdSearch_Regular_ReturnCodeLimit.html
(?#maxlines:5)<div class="main">((.|\n)*?)</div>かな
0202デフォルトの名無しさん2012/01/15(日) 03:01:16.02
>>197
やってみたけど、もっといい方法があるかも…
参考:http://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/190_CmdSearch_Regular_ReturnCodeLimit.html

検索:(?#maxlines:5)(<div class="main">)((.*\n)+)(</div>)
置換:<span class="main">\2</span>
02032022012/01/15(日) 03:02:39.67
被った。。。ゴメン
0204デフォルトの名無しさん2012/01/15(日) 09:30:42.81
お返事遅くなってしまいましたごめんなさい。
晒すような形になってしまうのでどうかと思ったのですが、
フィードバッグ?した方がいいと思ったので一応結果を添えます。
>>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まで頂いてありがとうございます。
解決した正規表現見てもなかなか理解が進まないのでもっと勉強します。
レス下さった皆さん本当にありがとうございます。感謝です。
02052002012/01/15(日) 14:26:26.74
>>204
そういう風に使うもんじゃなかったんだけど、そもそも秀丸固有の問題があるのを知らなかったごめん。
0206デフォルトの名無しさん2012/01/16(月) 19:34:46.94
掲示板にあるURLやアンカを削除するために、compileメソッドの引数にURLとアンカの正規表現を使いたいんですがどう書いたら良いですか?
0207デフォルトの名無しさん2012/01/16(月) 19:40:09.08
すいません>>206はjava言語です。
0208デフォルトの名無しさん2012/01/16(月) 20:28:26.54
あれ、このスレになかった?
頻出だとおもうんだけどなぁ
0209デフォルトの名無しさん2012/01/16(月) 20:39:28.87
Javaで動く出来合いのコードが欲しいんだろう
0210デフォルトの名無しさん2012/01/16(月) 21:05:33.12
>>209さんのおっしゃる通りです。宜しくお願いします。
0211デフォルトの名無しさん2012/01/17(火) 00:10:56.53
どこの掲示板かとかdatなのか見た目なのかとかで変わってくる。
一口にurlと言ってもurlにもいろいろあるからどこまでをurl扱いにしたいかってこともある。

urlにマッチさせる正規表現を作って公開してるサイトとかあるけどRFC準拠のurlにマッチするように
作られたものは準拠してないurlを取りこぼす。

ちなみにurlよりやっかいなのがメールアドレス。どこまでメールアドレスとして認識させたいかが
その状況によって大きく変わってくるから。
0212デフォルトの名無しさん2012/01/17(火) 01:43:51.22
Bashスクリプトのif文で正規表現ってかけないのかな?

if [ ${INPUT} = [0-9] ]; then
echo "数字です"
fi

こんな感じでいけそうだけど上手くいかない
0213デフォルトの名無しさん2012/01/17(火) 02:13:00.57
正規表現使ってるのあんまり見かけないけど一応書けるらしい

$ input=1aaa5; if [[ $input =~ ^[1-9]+$ ]]; then echo t; fi
$ input=12345; if [[ $input =~ ^[1-9]+$ ]]; then echo t; fi
t
02142062012/01/17(火) 02:43:42.22
>>211
教えて頂きありがとうございます。
では試しに2chの場合どう正規表現で書くのでしょうか?

2ch掲示板のdatファイルを見るとURLの終わりに半角空白があるので"^(http|https).*/s"といった感じでしょうか?
アンカの正規表現は思い付かないですorz
0215デフォルトの名無しさん2012/01/17(火) 03:22:55.40
性器表現
0216デフォルトの名無しさん2012/01/17(火) 16:25:00.67
>>214
2chの場合はこうじゃないの。サブサブドメインは見たことないと思う。
http://[a-z]*\.2ch\.net/
0217デフォルトの名無しさん2012/01/17(火) 16:52:21.66
ホスト部は数字も含むでよ
0218デフォルトの名無しさん2012/01/17(火) 19:20:06.75
桜蘭高校ホスト部は関係無いだろ
0219デフォルトの名無しさん2012/01/17(火) 21:20:23.99
落ち着け。
02202062012/01/17(火) 21:42:42.74
>>216
ありがとうございます。参考にさせて頂きます。
0221デフォルトの名無しさん2012/01/17(火) 22:17:10.60
>>220
質問の内容が2chのdatファイルにある、いずれかのレスに含まれているURLを指していると思うんだけど
それなら半角スペースが入ってるとかそんなルールないよ。
たとえばhttp://example.comとか http://example.com とか、このスレのdat見てみ
0222デフォルトの名無しさん2012/01/18(水) 01:33:00.66
まあなにか終わりを判別するものがないと困るから、
(まだURLが終わってないってことになるから)
URLの「後ろに」空白文字(改行含む)を書いてる人が多いだけでしょ。
0223デフォルトの名無しさん2012/01/18(水) 02:11:31.53
特に困らないよ。
日本語URLとかかかれちゃうと困るけど
0224デフォルトの名無しさん2012/01/18(水) 07:22:00.60
全角文字(2バイト文字?)だけを検索するには
なんと書くんでしょうか?
0225デフォルトの名無しさん2012/01/18(水) 08:02:49.11
[ぁ-ヶ]|[亜-�K]
0226デフォルトの名無しさん2012/01/18(水) 09:13:10.85
正規表現以外で文字列検索するなら最強の検索方法は何でしょうか?
0227デフォルトの名無しさん2012/01/18(水) 09:54:21.57
Procmailで転送設定していたのですが、正規表現でどう書けば
いいのか分からないので教えてください。

* ^(From).*[email protected]
.Sent.2012/

上記の条件で転送していたのですが、上記だとResent-From:の
ヘッダが先に条件として判定されてしまうようで、Resent-Fromでは
なくFromが○○だったら。としたいのですがどうすれば良いでしょうか。
02282272012/01/18(水) 10:26:12.57
自己解決しました。ANDで条件書けば良いだけでした。失礼しました。
0229デフォルトの名無しさん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★
どなたか頭のいいかた解決方法教えて下さい。
0230デフォルトの名無しさん2012/01/20(金) 00:38:38.68
★.*?あ.*?★
0231デフォルトの名無しさん2012/01/20(金) 00:53:35.04
プリクラでメンチ切ってる武丸さんみたいな正規表現だな
0232デフォルトの名無しさん2012/01/20(金) 01:12:53.52
>>229
>>1
環境によっては"量指定子?"の最短一致は使えないんじゃないかな
せっかく10文字という条件が出てるので、
★[^あ]{0,10}あ[^★]{0,10}★
「あ」と「★」の間も0〜10文字でいいと勝手に解釈したー
0233デフォルトの名無しさん2012/01/20(金) 01:45:25.09
{n,m}が使える環境なら*?も使えるんじゃね?
0234デフォルトの名無しさん2012/01/20(金) 01:45:42.30
>230
>232
有難う御座います。
解決しそうです
0235デフォルトの名無しさん2012/01/20(金) 04:25:27.26
>>233
そんなことないよ。*?はそれとは別物
0236デフォルトの名無しさん2012/01/20(金) 04:41:23.07
教える側のレベルが低すぎてどうしようもないなこのスレ・・
0237デフォルトの名無しさん2012/01/20(金) 06:28:25.47
そんなことをぼやいているようじゃやってけないぞ
0238デフォルトの名無しさん2012/01/20(金) 11:05:03.91
>>236
お前が教えてみろよ。低脳のくせに。
0239デフォルトの名無しさん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桁が含まれており文字数ではマッチできません。
よろしくお願いします
0240デフォルトの名無しさん2012/01/20(金) 12:32:06.29
/(\d+\s\d+\s\d+)\s/g --> $1\n
02412392012/01/20(金) 13:54:10.15
>240

すみません,質問の仕方がまずかったのかも。
教えていただいた表現では置換されませんでした。

使用環境はMacです。

0242デフォルトの名無しさん2012/01/20(金) 13:57:23.76
テンプレ読み直せハゲ
0243デフォルトの名無しさん2012/01/20(金) 13:59:42.25
>241

>1の説明に

「質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。 」

と書いてありますよ。
02442392012/01/20(金) 14:04:16.68
申し訳ありません

使用環境は
MacOS, 10.6
iText Express
です。

よろしくお願い致します
0245デフォルトの名無しさん2012/01/20(金) 14:11:05.27
>>241
自分の使っている処理系のヘルプを読め。
正規表現は合ってるし、おそらくこれが使えない正規表現エンジンはないか、ほとんどない。
0246デフォルトの名無しさん2012/01/20(金) 14:24:25.21
>>232は「★い★あ★」にマッチするはず。
0247デフォルトの名無しさん2012/01/20(金) 15:22:36.22
置換先が違うのかも。\1とか。
でもそれぐらいは質問者で対応するか。
0248デフォルトの名無しさん2012/01/20(金) 15:29:05.94
>>245
鬼車らしい
02492392012/01/20(金) 17:59:18.96
すみません
初めて正規表現を使うのでよく理解出来ていないかもしれませんが,
MacOS, 10.6,iText express では鬼車とよばれる正規表現ライブラリ
が用いられることは理解できました。
ただ問題の構文では検索が出来ません。
Mac では円記号の代わりにバックスラッシュを用いても結果は同じなのでしょうか?他にもなにか気をつけなければいけないことってあるでしょうか?
0250デフォルトの名無しさん2012/01/20(金) 18:10:08.97
ソフトの使い方はスレ違いだから
気を付けてくれたまえ
0251デフォルトの名無しさん2012/01/20(金) 18:10:33.37
>>249
簡単な正規表現なのでそのソフトを使ってる人に片っぱしから聞くのが早いよ
該当スレがあればそっちで聞く

あるいは正規表現で検索/置換するウインドウと
ヘルプの該当項目のスクリーンショットを撮ってどこかにUPすれば答えられるかもしれない
02522392012/01/20(金) 18:15:13.39
レスありがとうございます
出直してきます
0253デフォルトの名無しさん2012/01/20(金) 18:29:48.66
二度とこなくていいよ^^
0254デフォルトの名無しさん2012/01/20(金) 18:34:22.10
マック板は2つもあるんだから
そこで糞スレでも立てとけば暇な人がやってくるよ
0255デフォルトの名無しさん2012/01/20(金) 20:54:46.64
Macは「これ!」というエディタが無いのがな〜
Cot editorもWindowsのSakura editorに比べたら数年前世代の出来だし
0256デフォルトの名無しさん2012/01/20(金) 21:05:46.95
Sakura、ここ数年でそんな変わってんの?
0257デフォルトの名無しさん2012/01/20(金) 22:05:09.81
内部コードがUNICODEになった。
0258デフォルトの名無しさん2012/01/20(金) 22:47:04.58
鬼車って英語で言うとDemon
Car って言うらしいよ。



興奮先生が言ってた。
0259デフォルトの名無しさん2012/01/21(土) 00:13:07.30
日本語の「鬼」に相当する概念がないからアレ
0260デフォルトの名無しさん2012/01/21(土) 00:51:44.72
じゃあ鬼を定義してみる
・角が生えるイメージ戦略
・既婚女性(鬼女)
0261デフォルトの名無しさん2012/01/21(土) 00:53:16.75
ONI Devil
0262デフォルトの名無しさん2012/01/21(土) 01:03:03.70

zearth_02さん
デビルは羽の生えた様な悪魔で、デーモンは鬼のように角が生えてるみたいに種族の違いかも知れません(>_<)
サタン(ルシファー)は悪魔王だからトップですね〜たぶん(´〜`)


delta0011zzzさん
demon: ギリシャ神話でいう神々と人間の中間にあると考えられる悪魔。ただし悪魔となったのは後で神と人間の間の存在が元々の意味
devil: キリスト教でいう神に対する悪魔
Satan: 「悪」の擬人化されたもの; ヘブライ語で「敵」という意味で, キリスト教では神に敵対する悪魔の王といったところです
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1113583021
0263デフォルトの名無しさん2012/01/21(土) 01:08:40.77
Daemon Carなら許せるがな。
02642322012/01/21(土) 01:33:06.76
無理やり英語にする意味がわからないw<oniguruma

>>246
Σ(´∀`;)、指摘サンクスです。
★[^あ★]{0,10}あ[^★]{0,10}★
ですかね。

しかし、★あ★あ★あ★の場合、1個目と3個目にしかマッチしないんだよな
プログラムで検索位置を調整するとかなんだろうけど、
まあ>>229の環境がわかんないんで気にしてもしょうがないか。

>>236 ハンセイ…精進します
0265デフォルトの名無しさん2012/01/21(土) 03:28:53.08
そんなこんなでOgreKitって名前がついたんでしょう
0266デフォルトの名無しさん2012/01/21(土) 03:34:22.67
オグレかとオモたらオーガだったのか
0267デフォルトの名無しさん2012/01/21(土) 05:08:45.10
>>264
★あ★あ★あ★

から

★あ★
★あ★
★あ★

を抜き出すのは無理。
0268デフォルトの名無しさん2012/01/21(土) 05:10:37.13
あ、間違った…
0269デフォルトの名無しさん2012/01/21(土) 05:14:51.33
見つかった先頭位置から1文字ずらしてけばいいじゃん
0270デフォルトの名無しさん2012/01/21(土) 05:17:40.12
それと★をセパレータとみなしても取り出せるし
自分で正規表現組めないなら無理して使う意味ないよ
0271デフォルトの名無しさん2012/01/21(土) 06:04:09.62
多くの環境では無理じゃない。環境書かないから答え書かない。
0272デフォルトの名無しさん2012/01/21(土) 08:50:54.19
会話本文と置換したい文が紛らわしい。
もうちょっと書き込み見直してよ('A`)
0273デフォルトの名無しさん2012/01/21(土) 11:36:34.09
>>269
見つかった先頭位置?
末尾の位置 (lastIndex) じゃなくて?

>>270
え?セパレータ?
0274デフォルトの名無しさん2012/01/21(土) 19:12:11.59
>>229
/★[^★あ]*あ[^★]*(?=★)/g
0275デフォルトの名無しさん2012/01/21(土) 22:21:32.64
アスキーアートを正規表現に変換して文書から除去したいんですがどう書けば良いのでしょうか?
0276デフォルトの名無しさん2012/01/21(土) 22:22:11.57
すいません>>275はjavaです。
0277デフォルトの名無しさん2012/01/21(土) 22:26:51.85
>>275
正規表現でAAあぼ〜ん
http://toro.2ch.net/test/read.cgi/tech/1189246036/
0278デフォルトの名無しさん2012/01/21(土) 22:30:25.16
>>277
教えてくださって恐縮なんですがどれが正しいアスキーアートの正規表現なのか解らないですorz
0279デフォルトの名無しさん2012/01/21(土) 22:36:25.50
専用スレで聞けってことだよ
0280デフォルトの名無しさん2012/01/21(土) 22:46:10.28
>>279
すいませんありがとうございました。
0281デフォルトの名無しさん2012/01/22(日) 11:32:50.40
>>248
鬼車はUnicodeで使うと\dが全角数字にマッチするし、
\sは全角スペース等にもマッチするようになる
(\wはASCIIの[A-Za-z_]以外にも多バイト文字にもマッチする)

鬼車を正規表現エンジンで採用してるRuby 1.9系列は内部Unicodeだけど
\dが全角数字にマッチしないように細工してる
\sも細工してるかは忘れたけど、\wは細工ないので、
多バイト文字にもマッチする
0282デフォルトの名無しさん2012/01/22(日) 16:52:22.17
鬼車はオプション次第で動作がかなり変わるから、「鬼車は、〜だ」という言い方は出来ないな。
>>281が書いたような細工をしてから使っているという話もよく聞くから余計に。jane view作者もいじってから使ってる。
0283デフォルトの名無しさん2012/01/22(日) 18:32:14.08
全然正規じゃないよね
0284デフォルトの名無しさん2012/01/22(日) 22:33:03.38
>>281
Rubyは\wもいじってる。(でも\bはいじってない。)
0285デフォルトの名無しさん2012/01/23(月) 09:14:46.41
>>284
¥bって¥wと¥Wの境目だと思ってたんだけど、¥wいじって¥bいじらないと
その関係が成り立たなくて困らないんだろうか
0286デフォルトの名無しさん2012/01/23(月) 11:33:53.02
a、bどちらかの一文字にマッチ、という場合 a|b と [ab] はどちらかが好ましいってのはある?
0287デフォルトの名無しさん2012/01/23(月) 11:41:35.82
本来の「正規表現」だと、[ab]はa|bの糖衣表現でしかないから差はない。
ただ今のは全て拡張正規表現だから実装による。大差ないだろうけど。

見た目的にはa|bは結局カッコで囲む必要があるケースが多くうざくなりがち。
02882862012/01/23(月) 11:53:16.85
>>287
分かり易い説明ありがとう
0289デフォルトの名無しさん2012/01/23(月) 12:02:02.39
[a-z]の範囲指定は|の列挙より効率いいこと多いでしょうね。
0290デフォルトの名無しさん2012/01/23(月) 12:33:04.74
速度よりも可読性を優先してます。
0291デフォルトの名無しさん2012/01/23(月) 13:46:21.55
>>285
Rubyでは\p{Word}と\P{Word}の境目とされている
0292デフォルトの名無しさん2012/01/23(月) 17:44:16.32
>>285
よく分からんが仕様だとさ。
http://bugs.ruby-lang.org/issues/5208

ちなみに、Javaも\wと\bの対応がとれていない。ふざけとんのか
0293デフォルトの名無しさん2012/01/23(月) 21:15:38.00
環境によって動作が変わる\wとかは最初から使わないようにしてる。仕様変更に弱くなるから。
0294デフォルトの名無しさん2012/01/24(火) 07:03:03.76
全然正規じゃないよね
0295デフォルトの名無しさん2012/01/24(火) 07:40:13.90
そもそも正規ってどういうこと?
0296デフォルトの名無しさん2012/01/24(火) 08:37:06.32
>>295
ttp://hisashim.livejournal.com/219623.html?thread=48871
0297デフォルトの名無しさん2012/01/24(火) 09:50:20.13
「正規」って珍訳じゃないか?って人に言ったら、解ってないなと言われいろいろ説明されたことがある。実際どうなの?俺は原典読んでないんだけど。
0298デフォルトの名無しさん2012/01/24(火) 10:14:54.95
>296読んで、それを人に説明できるかは難しい
0299デフォルトの名無しさん2012/01/24(火) 10:56:19.38
正則集合がわからない人間に説明するのは難しい。
形式言語の3型文法を教えるのが簡単だと思われる。
0300デフォルトの名無しさん2012/01/25(水) 11:01:40.52
テキストファイルの中に
foo=bar
という形式で設定値が列挙されています。
grepかegrepだけでfoo=の右辺値のbarを抽出する正規表現はどうなるでしょうか?
(?<=foo=).*
とかやりたいんですけどgrepもegrepもこの式を受け付けてくれません。
0301デフォルトの名無しさん2012/01/25(水) 11:16:58.56
grepってパターンにマッチする *行* を表示するプログラムじゃないの?
マッチ部分だけが欲しいならsed使うんじゃなくて?
0302デフォルトの名無しさん2012/01/25(水) 11:20:14.85
ちなみにsedなら
sed -n -e '/^foo=/s///p'
0303デフォルトの名無しさん2012/01/25(水) 11:24:41.02
なるほど。
?sed -e "s/\(foo=\)\(.*\)/\2/" testfile.txt
で抜き出せました。grepとegrepにこだわっていたのが敗因でした。
ありがとうございました。
0304デフォルトの名無しさん2012/01/25(水) 12:57:24.59
余談だがパラメタ展開しないならシングルクォート使うとシンプルになるよ
0305デフォルトの名無しさん2012/01/26(木) 03:59:41.24
-oオプションはGNUだけ?
grep -Po '^foo=\K.*' FILE
0306デフォルトの名無しさん2012/01/26(木) 09:28:28.27
おお。perlオプションなんてあったんですね。
Pつきなら
(?<=foo=).*
でOKでした。
0307デフォルトの名無しさん2012/01/26(木) 12:43:27.44
>>306
\Kが使えるなら、おそらくそっちの方が戻り読みより効率がよい。
0308 ◆x0X2ba5fI. 2012/01/27(金) 19:59:37.19
javascript
同一文字長さ1-5の文字列がある(例:a,aa,..,aaaaa)
これを3回以内の置換で2文字以内の一意の並び(例:0,1,00,01,10)にできる?
出力に元の文字を使うことは可能
0309デフォルトの名無しさん2012/01/27(金) 20:30:47.06
書き込む前に意味が通るようによく推敲しろ
0310 ◆x0X2ba5fI. 2012/01/27(金) 20:41:45.68
例示してあるのに意味がわからないなら黙ってた方がいいと思うんだな僕は
0311デフォルトの名無しさん2012/01/27(金) 21:31:11.31
aaaaa/ab aaaa/bb aaa/b に置換したならば
a,aa,aaa,aaaa,aaaaa は a,aa,b,bb,ab となり要求を満たす
よって可能
0312デフォルトの名無しさん2012/01/27(金) 22:03:06.02
>>311
しかし普通は問題の原文は a,aa,aaa,aaaa,aaaaa ではなくa,aa,aaa,aaaa,aaaaaの
うちどれかの文字列ということになる。
0313デフォルトの名無しさん 2012/01/27(金) 22:13:46.72
ネットで検索したら、正規表現練習ツール
とかいうのがあるけど、これって練習につかえる?
0314デフォルトの名無しさん2012/01/27(金) 22:23:57.71
最終的に何がしたいのかを隠してるから、この質問に対する答えでは
最終的な解決にならない可能性が高い。そして新たなゴミ質問をしてくるという無限ループ。
0315デフォルトの名無しさん2012/01/27(金) 22:26:44.18
>>312
?
0316デフォルトの名無しさん2012/01/27(金) 22:36:17.46
\Kなんていう便利な正規表現って一体どこで見つけたの?
何冊か本読んで探してみたけどどこにも書いてない。
0317デフォルトの名無しさん2012/01/27(金) 22:41:37.84
>>313
正規表現は使ってナンボだと思う。
実戦こそ学習の場。
0318デフォルトの名無しさん2012/01/27(金) 22:59:45.23
>>317
>>313への答えになってないと思うんだ
0319デフォルトの名無しさん2012/01/27(金) 23:04:58.86
練習ツールよりも実戦って言ってるみたいだけど…
0320デフォルトの名無しさん2012/01/27(金) 23:11:34.35
そんなもん使ってる暇があったら実戦で覚えろって言ってるんだろ
>>317の回答はノーだと思われる
0321デフォルトの名無しさん2012/01/27(金) 23:11:50.30
>>316
Perl(とPCRE)の拡張表現だと思う。
pcreのmanpageかperldoc pelre辺り。
0322デフォルトの名無しさん2012/01/27(金) 23:23:39.03
\Kみたいなのまでは知らなくてもいいと思うよ。代表的なのさえしっかりおさえておけば大抵なんとかなる。
回答者やるレベルになりたいなら全部知ってないと話にならないけど、ここには話にならない回答者しかいない。
0323デフォルトの名無しさん2012/01/27(金) 23:24:46.90
鼻高々(笑)
0324デフォルトの名無しさん2012/01/27(金) 23:31:31.52
>>316
ソフトウェア板のサクラエディタふぁんくらぶには
鬼雲やbregonig.dllの作者である>>292の高田さんがよく降臨してるんだけど、
正規表現エンジンが鬼雲になったbregonig.dll V3では
\Kが使えるようになったと去年ステマしに来てた
0325デフォルトの名無しさん2012/01/27(金) 23:35:14.63
鬼雲?
0326デフォルトの名無しさん2012/01/27(金) 23:38:45.65
正規表現は単独の記号や記号とセットの英字でメタ文字が構成されてるから、
ネットでググれないのが欠点だよね

検索キーワードに記号を受け付けてくれたり、
正規表現でパターンマッチングできる検索サイトはないものか
0327デフォルトの名無しさん2012/01/27(金) 23:47:42.18
>>325
https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja

高田さんがonigurumaをフォークしてPerl5.14互換の機能を取り込んだ正規表現エンジン
Oniguruma-modだからOnigmo

ちなみに作者さんがOnigmoの漢字を決めかねていた時期に
いち早く「鬼雲△」とサクラエディタスレに書き込んでいたのは俺な
0328デフォルトの名無しさん2012/01/28(土) 00:05:19.62
>>322
頭悪いだろ。
0329デフォルトの名無しさん2012/01/28(土) 00:06:35.34
鬼蜘蛛の方がかっこいいのに…
0330デフォルトの名無しさん2012/01/28(土) 00:11:02.87
「本人がステマしてた」とかネタでも頭悪そう。言ってる人が
0331デフォルトの名無しさん2012/01/28(土) 00:12:25.92
自演がばれたとかじゃないの?
そうでないとつじつまがあわん
0332デフォルトの名無しさん2012/01/28(土) 00:17:25.49
ちゃんとリファレンスマニュアル読めよ
0333デフォルトの名無しさん2012/01/28(土) 01:11:45.94
クモ嫌いだからやめて。
0334 ◆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] = ...

ループ回して連想配列定義するのにそのキーを出来るだけエレガントに一意にしたかっただけ
実際には最終的に出力に影響はないしする必要のないことなので
隠してるとかいう次元の話でもなく良い手があればということで行末に?を付けた
0335デフォルトの名無しさん2012/01/28(土) 08:51:28.39
>>333
なるほど、実在する物体はイメージがプラスとは限らないのね。
ネーミング時には気をつけます。
0336デフォルトの名無しさん2012/01/28(土) 17:00:08.19
質問させてください。

>>3の解説サイト内のページ:
ttp://funcchan.blog16.fc2.com/blog-entry-36.html
において「A(?=B)(?=B)B」という正規表現を例に挙げて、
「先読みは何がすごいのかというと、同じ場所にある文字や文字列を複数回見ることが出来ることです!」
と書かれています。これはいったい、どのように「すごい」ことで、何の役に立つのでしょうか?

ちなみに、続けて「これとは別に、(?= ) にはもう1つの使い道があります」として、「AB」を「CB」に置換する表現の
例が載っています。こちらの方は普通に理解できるのですが、「これとは別にもう1つの使い道」と言うぐらいなので、
前者の方にもなにか使い道があるのだと思うのですが…。どんな使い道があるのか、理解できません。

よろしくお願いします。
0337デフォルトの名無しさん2012/01/28(土) 19:15:03.72
すごいと思うかは人による。文学や芸術でも見方、評価を押しつけるのはよくない。
凄いとか、感動したとか、はおいといて動作の事実をしれば十分。
0338デフォルトの名無しさん2012/01/28(土) 19:29:45.46
>>336
思い当たるとしたらこのあたり。
http://codezine.jp/article/detail/1573
0339デフォルトの名無しさん2012/01/28(土) 19:41:32.18
>>337
いや、そういうことを言いたいのではなくて・・・。
説明サイトに載っている「A(?=B)(?=B)B」という例は、説明のためだけの、実際には役に立たない例だと思うのですが、
では、「同じ場所にある文字や文字列を複数回見ることが出来る」という特徴の、実用的な使い道(実際に役に立つ例)とは
どのようなものかを知りたいのです。

私が知っている(?= )の使い方は、Aの後にBが来るようなAを探すというものですが、それはサイトで「これとは別のもう1つの
使い道」として説明されているほうに該当すると思います。では、そうではない使い道とは何なのだろうか?ということです。

>>338
なるほど! これは確かに、複数回見る場合の例に該当しますね。
こんな使い方もあるのですね。
勉強になりました。どうもありがとうございました。
0340デフォルトの名無しさん2012/01/28(土) 21:55:46.15
自分がすごいとおもえる用途を教えてくれって事か。
0341デフォルトの名無しさん2012/01/29(日) 07:25:02.38
それがないとできないことがあるという場面を想像すればいいだけなのにね。
0342デフォルトの名無しさん2012/01/29(日) 08:06:07.55
ただ動作の事実さえ知っておけば必要になったときに使えるし、必要になるまではどうでもいいものなんだから
「凄いとか、感動したとか、はおいといて動作の事実をしれば十分。」
って言ってるんじゃないの。
0343デフォルトの名無しさん2012/01/29(日) 09:06:32.32
A(?=.*1)(?=.*2)

Aの後ろに1と2が存在するA。対象テキストで、2⇒1の順に出てきてもマッチする。

A(?=.*1.*2)

2⇒1の順に出てきたらマッチ出来ない。
0344デフォルトの名無しさん2012/01/29(日) 09:10:27.66
>>342
どうしてそうなるw

>>339
確かにこの例じゃ「だから?」で終わりだよなー。
03453362012/01/29(日) 10:51:27.62
沢山のレスありがとうございます。

解説サイトを見て動作の事実はわかったのですが、それがなんの役に立つのか全く見当がつかなかったので、
質問させていただきました。
数学でも、公式だけを知れば、あとは大した例題をこなさなくても必要時には使いこなせるという人もいるかも
しれませんが、私は頭悪いため、そうはいかないもので。

実際、これまでANDの検索をしたい時は「A.*B|B.*A」などとやって、面倒だなーと思ってたんですが、今後は
スマートに検索できそうです。
0346デフォルトの名無しさん2012/01/29(日) 11:35:36.80
ブログは大半がクズ。いいのもある。
しかし馬鹿に見分けるの困難だから、
定評のある本で勉強することが必要になる。
どんな馬鹿でも時給千円の働きはするのだから、
糞ブログで時間を無駄にするのは馬鹿げてる。
0347デフォルトの名無しさん2012/01/29(日) 11:49:15.48
>>345
それがABCDEFGぐらいあると面倒だなーですまなくない?
0348デフォルトの名無しさん2012/01/29(日) 13:43:40.77
>>345
そういう分からないとこがあったらどんどん聞いていいですよ。後でそのサイトを読む人の参考になりますし。

>>346
正規表現は敷居が高いから自分に合う本を探すのは大変でしょうね。
0349デフォルトの名無しさん2012/01/29(日) 15:57:07.18
検索って地頭が良くないとダメだからな
自分で有効な検索ワードを考えられない人は金払って解決するのがいいと思う
0350デフォルトの名無しさん2012/01/29(日) 19:42:55.72
よろしくお願いします。

●正規表現の使用環境
さくらエディタの「タイプ別設定の正規表現キーワード」
ライブラリはデフォルトのbregoingを使用

●検索か置換か?
検索

●説明
ブロック型のコメントスタイルが2つしか使用できなく
3つ目を利用したいがどうしたらいいのか。

具体的にはC言語で
/* から */
#if 0 から #endif にくわえ
、
#if 0 から #else
に相当するものを追加したい。

正規表現キーワードを使えばうまくいきそう、というところまでは
たどりついたが、どう書いていいのかよくわからない。

板違いならすいません。
0351デフォルトの名無しさん2012/01/29(日) 19:57:41.89
>>350
無理
0352デフォルトの名無しさん2012/01/29(日) 23:10:13.65
>>350
板違いではないと思うけど、サクラエディタのタイプ別設定の正規表現の話なら、
こっちのスレの方が回答が期待できるよ

サクラエディタふぁんくらぶ part15
http://anago.2ch.net/test/read.cgi/software/1326436848/

ちょっと前にも書いたけど、上記スレならbregonigの
作者からアドバイスがもらえる可能性もあり
03533502012/01/30(月) 08:08:58.16
>>351,352
ありがとうございます。そちらで聞いてみます
0354デフォルトの名無しさん2012/02/02(木) 18:51:05.99
よろしくお願いします。

●正規表現の使用環境
JaneStyleのNGEx

●検索か置換か?
よくわかりません

●説明
4行以上の書き込みすべてを対象としてNGにしたい
0355デフォルトの名無しさん2012/02/02(木) 19:14:34.00
>>354
「NGEx.txtを晒すスレ」
0356デフォルトの名無しさん2012/02/02(木) 21:04:35.66
>>355
分からないなら分からないって言おうな
0357デフォルトの名無しさん2012/02/02(木) 22:20:24.46
>>354
正規表現使えるの、これ?
0358デフォルトの名無しさん2012/02/02(木) 22:57:26.12
「改行が3回以上」で表現できないの?
0359デフォルトの名無しさん2012/02/02(木) 23:45:26.86
datにマッチさせるんだっけ
NGWordに正規(含む)で
^(.*<br>){3}
こうか?
03603542012/02/03(金) 00:06:54.59
>>359
無事にできました
ありがとうございました
0361デフォルトの名無しさん2012/02/03(金) 03:17:53.42
●正規表現の使用環境
java

●検索か置換か?
patternメソッドで置換

●説明
2chの掲示板からコメント部分だけを抽出しました。URLやアンカは正規表現で削除できたのですがAAを削除するための正規表現がどうしても解りません。

全角の/やタブを多く含んでいるのは解っているのですが色々考えても解りませんでした。

AAを削除するスレッドでも質問したのですが良いアドバイスを貰えませんでした。何卒アドバイスを頂けないでしょうか?宜しくお願いします。
0362デフォルトの名無しさん2012/02/03(金) 03:29:36.97
>>361
普段使わない文字が含まれてたら除去すればいいじゃん
0363デフォルトの名無しさん2012/02/03(金) 03:36:07.18
そのつどAAに使われやすい文字(列)を手動で登録。
0364デフォルトの名無しさん2012/02/03(金) 03:38:35.26
>>362
()/%のような記号を一文字表す正規表現ってありますか?
日本語&カタカナ&漢字&英語以外の文字を表す正規表現をかなり調べましたが見つけることができませんでしたorz
0365デフォルトの名無しさん2012/02/03(金) 03:41:45.92
>>363
ありがとうございます。完全に除去したいならそうするしかないですよね
0366デフォルトの名無しさん2012/02/03(金) 04:05:19.89
()/%があるだけでAAと判定するのか。。
(%)/ まぁ、ウルトラマンといえばそうだが。
0367デフォルトの名無しさん2012/02/03(金) 05:04:30.13
>>354がNGあぼーん
0368デフォルトの名無しさん2012/02/03(金) 09:39:57.65
お願いします

●正規表現の使用環境
PHP5

●検索か置換か?
置換

●説明
0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙ ゚\「」,.()-/

preg_replace関数を使い上記文字以外を全て削除したい

●対象データ
0ガ9ギAグアaイbウcエdオ

●希望する結果
09Aアイウエオ
0369デフォルトの名無しさん2012/02/03(金) 09:44:33.13
[^0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙ ゚\\「」,.()\-\/]
0370デフォルトの名無しさん2012/02/03(金) 09:59:23.48
>>369
$text = '0ガ9ギAグアaイbウcエdオ';
$text = preg_replace('/[^0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙゚\\「」,.()\-\/]/' ,'' ,$text);
echo $text;

このようにしてみましたが何も削除されずそのまま表示されます><
0371デフォルトの名無しさん2012/02/03(金) 10:12:47.84
>>370
UTF-8にしてみ
0372デフォルトの名無しさん2012/02/03(金) 10:33:33.36
>>371
結果
0ガ9ギAグアイウエオ
となりました。
なぜガギグが残るのでしょうか?
0373デフォルトの名無しさん2012/02/03(金) 10:35:26.31
失礼・・・
半角のガギグは1文字ではなく別々の文字なんですね
自己解決しました
0374デフォルトの名無しさん2012/02/03(金) 11:01:07.21
NGEx.txtを晒すスレ4http://jane.s28.xrea.com/test/read.cgi/bbs/1325934427/l50
0375デフォルトの名無しさん2012/02/04(土) 20:12:55.57
とくに目的はないんですが、
気になることがあったので教えてください。

●3文字か4文字のaにできる限りマッチする正規表現
(aaa|aaaa)*

●文字列 9文字のa にマッチさせる
aaaaaaaaa

Java6標準の正規表現と、秀丸から呼び出したJRE32.dllでは、
9文字マッチ(aaa aaa aaa)するんですが、
秀丸のHMJRE32.dllでは、8文字(aaaa aaaa)しかマッチしません。

ほかの正規表現エンジンでは、どのような動作が一般的なんでしょう?
詳しい方いらっしゃいましたら教えてください。
0376デフォルトの名無しさん2012/02/04(土) 20:58:37.91
スクリプト言語などで使われているのは
大部分の実装では縦方向探索だから
最長・最短の正確な照合はできない。
縦に探索して枝刈りするからね。

lex/egrepなら方式が違うから確実に最長一致するんだけどね。
0377デフォルトの名無しさん2012/02/04(土) 21:01:04.24
あ、んで上の例の場合は正解が複数あるケースだから
どれを返すかはプログラムの作り方で偶然に決まりますん。
0378デフォルトの名無しさん2012/02/04(土) 21:02:47.21
>>375
hmjre32.dllの動作はとっても特殊だよ
0379デフォルトの名無しさん2012/02/04(土) 21:38:56.03
9文字マッチが正解
0380デフォルトの名無しさん2012/02/04(土) 22:00:28.32
>>375
じゃあこれで

a{6,}|a{3,4}|a{6,}

真ん中を優先する実装があった場合はしらんw
0381デフォルトの名無しさん2012/02/04(土) 22:10:09.84
>>380
突っ込み所が多すぎ。
とりあえず、a{11} にマッチするから結果が変わる。
0382デフォルトの名無しさん2012/02/04(土) 22:47:38.88
最終的に全長が一番長いパターンが正解
同じ長さで複数の正解がある場合は
もうプログラムの作り方によって偶然決まる。

だから正確さを求める場合は
パターンを書く人が意識して気をつけるしかない。
0383デフォルトの名無しさん2012/02/04(土) 23:04:20.27
>>380
「3a+4b (a,b∈N∪{0})」の値域が「0,3,4および6以上」だから確かに結果は異なるようだが、
「空文字列にマッチしないから」なら兎も角、「a{11}にマッチするから」は流石に阿呆すぎ
0384デフォルトの名無しさん2012/02/04(土) 23:35:54.40
(?> ) を使えばいいだけでないの。
0385デフォルトの名無しさん2012/02/05(日) 03:40:24.75
375です。ありがとうございます。

自分の方でも、いくつかのスクリプト言語で試してみました。
>>375の(aaa|aaaa)*ではなく、
(aaaa|aaa)+ として、あえて先に4文字のaaaaを書くようにしました。

Java6、JRE32.dll では9文字マッチしました。
ActivePerl5.5 Python3 Ruby1.9 Firefox7 chrome16 IE8 は、
8文字マッチでした。

最終的に最長のマッチが主流だと思い込んでいたのですが、
失敗さえしなければ、最長のマッチとは限らない、という方が主流っぽいですね。
0386デフォルトの名無しさん2012/02/05(日) 05:14:47.51
エンジンの種類によって変わるんじゃないか
バックトラックNFA、POSIX NFA、DFA
03873812012/02/05(日) 07:00:11.53
>>383
> 「空文字列にマッチしないから」なら兎も角、「a{11}にマッチするから」は流石に阿呆すぎ
なぜ阿呆?
面倒だから全部は指摘しなかったけどさ。
「真ん中が優先される」とか「a{6,}を二重に列挙してる」とか。
0388デフォルトの名無しさん2012/02/05(日) 15:05:45.09
>>387
11文字にマッチすると何がだめ?
03893812012/02/05(日) 16:09:19.31
>>388
それは俺に聞くことか?
0390デフォルトの名無しさん2012/02/05(日) 16:57:29.26
a11文字だった場合は11文字にマッチさせたいのが元だとおもうんだが、
11文字にマッチするようになっちゃうからアウトっていってるように見えたから
0391デフォルトの名無しさん2012/02/05(日) 17:19:52.24
greedyとlongestの違いって奴だな。greedyを最長って訳してることが多いので
俺も憶えたてのころはしばらく騙されてたわ。
0392デフォルトの名無しさん2012/02/05(日) 18:05:20.70
>>391
hmjre.dllはそのどちらでもないけどな。
|に関してはlongest的な動作をして、
繰り返しに関してはgreedy的な動作をしている(しかもバックトラックが不十分)
03933812012/02/05(日) 20:34:53.75
>>390
> 11文字にマッチするようになっちゃうからアウトっていってるように見えたから
(aaa|aaaa)* は a{11} にマッチしないのだからその認識で合ってるよ。
なぜそういう仕様なのかは俺が知るわけがない。
03943812012/02/05(日) 20:38:29.32
ごめん。a{11} にマッチするな。忘れてくれ…。
0395デフォルトの名無しさん2012/02/05(日) 20:52:01.92
>>394
いや、^(aaa|aaaa)*$ のように前後に ^$ 付けたりして11文字にマッチするように強制すればマッチするけど、
そうじゃない場合は11文字にマッチするとは限らないのでは。少なくともPerlとかRubyはそのようだし。
0396デフォルトの名無しさん2012/02/05(日) 22:13:58.57
(aaa|aaaa)*で表現される文字列の集合には11文字も含まれるから、マッチする

正規表現でマッチする/しないというのは「ある文字列がパターンで表される文字列の集合に含まれるかどうか」でしょ
>>395の実装の話は「マッチする部分を探す」という処理で、解が複数あるときにどれを選択するかというのが
上で挙がっているgreedyとかlongestとかの話
0397デフォルトの名無しさん2012/02/06(月) 01:07:40.80
●正規表現の使用環境
bat

●検索か置換か?
検索

●説明
先頭に[があるかどうかを検索したい
例えば
set a="[色々な文字列"
echo %a%|findstr /r /c:"^.[." 1>nul
これでダメだったので質問させて頂きました

●対象データ
"[aaa"
"(bbb) [ccc]"
"(ddd) eee ["
"[fff] [ggg]"


●希望する結果
"[aaa"
"[fff] [ggg]"

よろしくおねがいします
0398デフォルトの名無しさん2012/02/06(月) 01:09:18.34
^\[
0399デフォルトの名無しさん2012/02/06(月) 01:42:06.59
ありがとうございます。^.\[.で出来ました
0400388 (!= 383)2012/02/06(月) 06:23:40.38
>>394
ならよかった。なんか見落としてたのかとおもてた
0401デフォルトの名無しさん2012/02/06(月) 19:11:03.78
C#スレから誘導されてきました


正規表現で

${aaa}
に一致して、

${aaa
}
に一致させないようなパターンはどうやって書けばいいのでしょうか?

\$\{([^}+)]\}
だと、2つ目のパターンでaaa\r\nを取得してしまいます
宜しくお願いします
0402デフォルトの名無しさん2012/02/06(月) 19:18:16.22
中身
.*?
0403デフォルトの名無しさん2012/02/06(月) 19:38:05.20
できました!
ありがとうございました!
0404デフォルトの名無しさん2012/02/07(火) 00:24:07.47
."*?"は>>401の条件であれば間違っていないです。

ただ、↓がより正確な書き方かな。

\$
\{
[^
\{\}\r\n
]+
\}

."*?" だと、「${aaa}bbbにマッチさせたい」というように、後ろに追加条件が加わると誤作動の
原因になります。(${aaa}改行${ccc}bbbにマッチしてしまう)

//エスケープは分かりやすいように付けてます。
0405デフォルトの名無しさん2012/02/07(火) 00:47:40.13
.*?} は非欲張りだから最初の } までしか食べないし
ドットは改行に(通常)マッチしないよ
0406デフォルトの名無しさん2012/02/07(火) 21:57:17.17
\$\{([^}+)]\}って括弧の対応おかしくね?
0407デフォルトの名無しさん2012/02/08(水) 05:58:46.47
>>404
改行オプションやら仕様変更やらに左右されない正規表現ってことかー、そういう考え方もあるんだ、ふむふむ。
0408デフォルトの名無しさん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等、一定じゃない物はどんな数値に変わっても対応できるようにしたいです。

改行の制限に引っかかってしまったのでソースは下に書き込みます。
0409デフォルトの名無しさん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);
}
0410デフォルトの名無しさん2012/02/08(水) 14:40:26.03
なんちゃら知恵袋の回答を待ったほうがいいとおもうよ
答えてくれてる人がかわいそう
0411デフォルトの名無しさん2012/02/08(水) 15:08:44.54
そんなの、遅い方が悪いだろ・・・
0412デフォルトの名無しさん2012/02/08(水) 15:23:49.04
悪いとも思ったのですが、ちょっと急ぎなので、、、
0413デフォルトの名無しさん2012/02/08(水) 15:26:52.32
こんな感じか?
.+?>(.+?)<.*?span.*?>(.+?)</span>
0414デフォルトの名無しさん2012/02/08(水) 15:28:25.60
そうだぞ、>>412さんは急ぎなんだから遅い奴なんか待ってらんねーんだよ
0415デフォルトの名無しさん2012/02/08(水) 15:32:13.91
急ぎとかアンタ以外の人間にとってはどうでもいいことだ
ソースも腐ってるし
業務ですぐ必要だというなら金出してやってもらえばいいことだしな
俺ならタグ解析させるけどな

ソースがゴミに埋もれてるからできないというなら処理する前に掃除すればいいんだよ
0416デフォルトの名無しさん2012/02/08(水) 15:33:11.08
業者っぽいなー、正規表現使わなくても出来ることだし時間無いならそうすればいいのに。
仕事をネットに下請けさせんなし。正規表現使わなくても出来ることなんで教える必要なしと判断した。
0417デフォルトの名無しさん2012/02/08(水) 15:35:12.94
お前らマルチはスルーするって知ってる?
答えてもらえりゃ何でもいい、腐った奴らなんだから答えなくていいんだよ
0418デフォルトの名無しさん2012/02/08(水) 16:02:30.57
>>413

これじゃ無理じゃね?
0419デフォルトの名無しさん2012/02/08(水) 16:14:30.48
>>415

なんか嫌な事でもあったのか?
0420デフォルトの名無しさん2012/02/08(水) 16:20:22.26
生きてて嬉しいことなんて正規表現が一発で通ったときくらいだよな
04214122012/02/08(水) 16:21:07.70
すいません
こんなに皆さんの気分を害するとは思いませんでした
0422デフォルトの名無しさん2012/02/08(水) 16:28:24.36
向こうの返事よりこっちの質問のほうが早いっていうのはマナー的に残念。礼儀は大事だよ。
04234122012/02/08(水) 16:45:31.36
>>409

これ

$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>";

○○の部分が必要じゃね?あんまり詳しくないから勘だけど
04244122012/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>";
0425デフォルトの名無しさん2012/02/08(水) 16:55:47.85
御教示
0426デフォルトの名無しさん2012/02/08(水) 17:17:03.85
あれ、教授も合ってないっけ?
0427デフォルトの名無しさん2012/02/08(水) 17:18:54.53
$pattern = "/<span class=\".*?\"><span id=\".*?\">(.*?)>(.*?)</span><span id=\".*?\">\((.*?)\)/s";

・・・じゃ駄目か、・・・駄目だろうなー
0428デフォルトの名無しさん2012/02/08(水) 17:23:28.61
>>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>
0429デフォルトの名無しさん2012/02/08(水) 17:33:14.51
>>426
あってる。ただしその場合、
「より親切丁寧にお母さんみたく優しく教えれ」
って意味になる
0430デフォルトの名無しさん2012/02/08(水) 17:34:18.98
あはは
0431デフォルトの名無しさん2012/02/08(水) 17:38:35.99
>>428

これだと
matches[1]の部分が間違ってないか?
0432デフォルトの名無しさん2012/02/08(水) 17:46:16.90
もっと簡潔に書けそうだが
0433デフォルトの名無しさん2012/02/08(水) 18:22:20.19
質問です。

ダブルクォーテーション(")に囲まれた文字列を検索する時
\".*?\"で検索できますが、これだと改行が除かれます。
文字列の中に改行を含める場合は、どのように記述すれば良いのでしょうか?
0434デフォルトの名無しさん2012/02/08(水) 18:30:12.19
>>432
簡潔と手抜きは違うからな
0435デフォルトの名無しさん2012/02/08(水) 18:32:40.11
>>433
ドットに改行を含めるオプション(使用言語ごとに異なる)を使うのがお手軽
0436デフォルトの名無しさん2012/02/08(水) 18:32:45.27
>>433
\"[\s\S]*?\"
0437デフォルトの名無しさん2012/02/08(水) 19:01:53.83
>>424
自演失敗のフォロー?
0438デフォルトの名無しさん2012/02/08(水) 21:34:00.95
>>425-426
師弟がみっちり学問を教える時は「ご教授」も使うらしいが、
一般的な「教えて下さい」の時は「ご教示」を使うのが一般的。

日本語変換がイマイチというより、元の意味を知らずに使ってる人多数。
まるで昔の「独壇場」(正しくは独擅場)
0439デフォルトの名無しさん2012/02/08(水) 23:14:23.93
独擅場(どくせんじょう)
0440デフォルトの名無しさん2012/02/09(木) 04:17:14.62
>>438
三行目は重言じゃないか?
0441デフォルトの名無しさん2012/02/09(木) 05:35:29.17
マルチのゴミクズが湧いてたのか
お前が食いっぱぐれてのたれ死んでも誰も困らないから
急ぎだとかそういう理由でマルチしてんじゃねぇよ池沼
0442デフォルトの名無しさん2012/02/09(木) 06:06:08.62
XMLみたいなネストした構造って、
真面目にやろうとすると正規表現じゃ書けないよね。


と思ってたんだが、ちょっとググったら今はできるんだな
鬼車とか一部のエンジン限定だが。
0443デフォルトの名無しさん2012/02/09(木) 08:29:51.51
何で環境限定してるんだ?
頭悪そう。
0444デフォルトの名無しさん2012/02/09(木) 11:21:05.34
>>443
お前頭悪いってよく言われるだろ
0445デフォルトの名無しさん2012/02/09(木) 12:12:33.88
マルチの正規表現何故かうまくいかん
意外と難しいのかこれ?
それともなんか勘違いしちゃってるかなー
0446デフォルトの名無しさん2012/02/09(木) 12:31:24.29
まったりいこうぜ
0447デフォルトの名無しさん2012/02/09(木) 13:57:18.33
>>445
がんばりなよ
04484332012/02/09(木) 14:17:58.36
>>435,436
レスありがとうございます。

ブランクも検索対象に含めますので、>>436ではできないのでは?
04494452012/02/09(木) 14:44:54.26
できねー!!
後は任せた!
0450デフォルトの名無しさん2012/02/09(木) 14:53:31.96
>>427

</span>を<\/span>にしないと
とりあえず駄目だろ
0451デフォルトの名無しさん2012/02/09(木) 14:58:02.81
>>449

出来るやつ、今、居ないんじゃね?
俺はわからん
0452デフォルトの名無しさん2012/02/09(木) 15:13:48.19
マルチポストはスルーという鉄の掟に従ってるだけ。
0453デフォルトの名無しさん2012/02/09(木) 15:26:35.93
頭固いなー
0454デフォルトの名無しさん2012/02/09(木) 15:33:38.16
>>423は二重引用符エスケープしてないけどいいのかな
0455デフォルトの名無しさん2012/02/09(木) 16:04:26.65
やべえ、思いのほか全然できねえ
イライラしてきた
0456デフォルトの名無しさん2012/02/09(木) 18:36:29.49
Twitterにでも書いてろゴミ
0457デフォルトの名無しさん2012/02/09(木) 18:44:19.86
正規表現を覚えればいいだけなのになんで人に聞こうとするんだろう。学習能力無いのかな。
0458デフォルトの名無しさん2012/02/09(木) 20:01:51.00
●正規表現の使用環境
wxWidets (wxRegEx)

●検索か置換か?
検索

●説明
一行の中に丸括弧で閉じられた文字列を検索したい。
丸括弧が出てくる位置や数は不定です

●対象データ
(2012年2月)北海道で撮影。(raw)で保存。猫と一緒(雄)

●希望する結果
(2012年2月) (raw) (雄)

(\\(.*?\\))で検索すると、"(2012年2月)"だけ検索されます。
(\\(.*?\\))(?:.*)(\\(.*?\\))(?:.*)(\\(.*?\\))で検索すると(2012年2月)(raw)(雄)が検索されます。
ただ括弧の位置が変わった場合には、この正規表現では検索にかからなくなります。

サクラテキストエディタ等の正規表現で検索すると、(\\(.*?\\)) 文章内にいくつ括弧文字列があっても
すべて検索されています。

正規表現でどのように書けばいいのか、それとも、プログラム上で検索しているのかわかりません。
どのように実現しているかまったくわかりません。

考え方などをおしえてくださいませ。
0459デフォルトの名無しさん2012/02/09(木) 20:08:47.09
>>458
よく似た質問をwxWidgetsのスレで見たばかりの気がするが?
ループで回せ。
0460デフォルトの名無しさん2012/02/09(木) 21:28:51.69
ループで回して掲示板のURL一覧から一行ずつ書き込んでいったのがこの結果
0461デフォルトの名無しさん2012/02/09(木) 21:30:25.21
●正規表現の使用環境
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←これにヒットしてしまう等、致命的な部分があります。

ご教示いただければ幸いです。
0462デフォルトの名無しさん2012/02/09(木) 21:35:47.84
それって正規表現だけでは無理だろ。
割り当てを正確に知る必要がある。
追加で、使う時点で生存しているのか確認するルーチンなども。
0463デフォルトの名無しさん2012/02/09(木) 21:39:30.67
最大3桁で三桁あるときの先頭を1,2しか許容しないとかなら
[12]?[0-9]?[0-9]

で検索できるけど、199はいいけど299は許容しないとかまでいくとめんどくさくなるね。
0464デフォルトの名無しさん2012/02/09(木) 21:40:19.09
これが無効なIPだという情報はどこから入手した?どれを有効と判定するかで式が変わる。

999.999.999.999
0465デフォルトの名無しさん2012/02/09(木) 21:42:53.51
一桁目と次の.だけ書く。後は最初の1を0にして適当につないで。
[1-9]|¥([1-9][0-9]¥)|¥(1[0-9][0-9]¥)|¥(2[0-4][0-9]¥)|¥(25[0-6]¥)¥.
hostmaskも含めるなら最初は1じゃなくて0。
0466デフォルトの名無しさん2012/02/09(木) 21:43:05.70
IPアドレス一覧【whoisサーバ一覧】
http://www.cman.jp/network/support/IP_list.html


世界の国別 IPv4 アドレス割り当て済み個数
http://nami.jp/ipv4bycc/total.php


国/地域別 IP アドレス割り当てリスト - fetus
http://fetus.k-hsu.net/document/network/ipv4assign/
0467デフォルトの名無しさん2012/02/09(木) 21:48:32.33
>>455
がんばりなよ
0468デフォルトの名無しさん2012/02/09(木) 21:50:03.94
>>462
あ?
0469デフォルトの名無しさん2012/02/09(木) 21:55:34.74
こういうのをIPと見なすのかって事だ。


000.*IANA - Reserved(予約済み)

127.*IANA - Loopback

224.*Multicast IANAマルチキャスト

240.*Future use (将来のために予約済み)

http://www.cman.jp/network/support/IP_list.html
0470デフォルトの名無しさん2012/02/09(木) 21:57:09.78
ある国や地域に割り当てられたとしても、それが実際に割り当てられてるかは判らない。
0471デフォルトの名無しさん2012/02/09(木) 22:20:28.58
>>464
IPv4のアドレスは32ビットを8ビットごとに区切ったものだからそりゃ無効だ。
0472デフォルトの名無しさん2012/02/09(木) 22:26:41.67
スクリプトと組み合わせた方が早いよ
04734612012/02/09(木) 23:11:29.53
単純に
0.0.0.0 〜 255.255.255.255
の範囲であればIPv4アドレスとして有効と思っていました。

linuxなんで、grep結果を出力したテキストを整形するだけでも十分実用に耐えるかもしれません。

行数が多い場合は、やはりスクリプトの方が良さそうですね。
今回はこれでcloseにさせて下さい。

ご意見、ありがとうございました。
0474デフォルトの名無しさん2012/02/09(木) 23:15:22.98
すでに0.0.0.0 〜 255.255.255.255が全て有効だったら
新規の企業や大学はアドレス取得できなくなってるだろ。
枯渇は問題になってるが、満杯でもない。
0475デフォルトの名無しさん2012/02/09(木) 23:24:30.10
別に規格上有効かどうかがわかればいいんじゃ……。
0476デフォルトの名無しさん2012/02/10(金) 00:31:24.10
>>469
予約済みのIPアドレスは、IPアドレスの形式として有効じゃないって言いたいのか?

>>461って単に
> IPアドレス(xxx.xxx.xxx.xxx IPv4)にヒットさせたい
ってだけだよな。
0477デフォルトの名無しさん2012/02/10(金) 00:43:55.70
んーと、getaddrinfoは IPアドレスの数値表記とホスト名両方OKだからさ
正規表現使わずに直接アドレス引けばいいんでないの。
そんでエラー返ればアドレス入力エラー。
0478デフォルトの名無しさん2012/02/10(金) 00:50:06.05
(?<1>[012]?[0-5]?[0-5])(?:(?<1>[.][012]?[0-5]?[0-5])){3}
こんな感じではだめでしょうか?
0479デフォルトの名無しさん2012/02/10(金) 00:57:44.53
>>459
質問したの私です。
最短マッチの場合、ループ処理で検索するのですね。

ありがとうございました。
0480デフォルトの名無しさん2012/02/10(金) 03:45:27.97
>>478
だめすぎじゃね
0481デフォルトの名無しさん2012/02/10(金) 03:47:14.37
>>445
鬼車ならjane bbsのreplacestrスレで聞くと正規表現の猛者達が答えてくれる。レベルはんぱねぇよ。
0482デフォルトの名無しさん2012/02/10(金) 03:48:37.65
Jane総合掲示板
http://jane.s28.xrea.com/bbs/

ReplaceStr.txtを活用するスレ Part9
http://jane.s28.xrea.com/test/read.cgi/bbs/1317603120/l50
0483デフォルトの名無しさん2012/02/10(金) 03:53:02.33
マルチのは正規表現使わなくても出来るって言われてんのになんでまだ正規表現でやろうとしてんの。
0484デフォルトの名無しさん2012/02/10(金) 08:09:33.72
java用の高速な正規表現ライブラリってありますか?
java.util.regexは遅いし
google RE2を移植してみたもののまるで使いものになりません。
0485デフォルトの名無しさん2012/02/10(金) 08:18:35.88
すみません鬼車はネイティブをコールしているので除外でpure javaでお願いします。
04864332012/02/10(金) 08:41:06.95
>>435

>>ドットに改行を含めるオプション(使用言語ごとに異なる)を使うのがお手軽

調べてみたのですが分かりません。
Objective-cで、ドットに改行を含めるオプションは、どのように指定すれば良いのでしょうか?
(「"」で囲まれた改行、スペースを含む文字列を検索する場合)
04874612012/02/10(金) 10:26:45.56
>>478
まったくヒットしなくなりました。出発点よりデグレーションしてます!
0488デフォルトの名無しさん2012/02/10(金) 11:12:59.04
>461

これはどう?

●3-6 IP(0以上255以下の整数)を検索
http://www.geocities.jp/oraclesqlpuzzle/regex/regex-3-6.html
0489デフォルトの名無しさん2012/02/10(金) 11:29:36.22
>>483

それぞれ事情とかはあるだろ
0490デフォルトの名無しさん2012/02/10(金) 11:58:05.30
>>486
どう調べたの
0491デフォルトの名無しさん2012/02/10(金) 12:52:06.74
>>490
そんなこと聞いてどうするんだよ
0492デフォルトの名無しさん2012/02/10(金) 13:00:57.44
自分で調べるやつはこんなとこに質問しないぞ
0493デフォルトの名無しさん2012/02/10(金) 13:40:00.68
[0-5]はどうなのよ?
192.168.0.1 がアウトじゃん
0494デフォルトの名無しさん2012/02/10(金) 15:26:34.28
(?:(?<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}

こんなかんじ?
0495デフォルトの名無しさん2012/02/10(金) 15:29:05.76
>>465でほぼ答え出てるじゃん。
\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.
0496デフォルトの名無しさん2012/02/10(金) 15:52:44.88
回答者の能力的にあそこから答えを導きだすのは難しかったのだろう。
その前後のレスにもひどいものがあるが。
0497デフォルトの名無しさん2012/02/10(金) 16:22:05.03
ここには正規表現極めたつもりになってる素人がいるからなw
0498デフォルトの名無しさん2012/02/10(金) 16:34:35.05
>>494
こういう正規表現一般についての質問ですが、
ターゲットを捕らえることができることは確かめられますが、それ以外のものも捕捉されて
しまうのではないか、という不安はどのように解消すればよいのでしょうか。
0499デフォルトの名無しさん2012/02/10(金) 17:00:08.29
>>497

悪態はつくが質問には答えない奴とかな
あと自治気取ってる奴もか

お前、答えられないだけだろ、と
0500デフォルトの名無しさん2012/02/10(金) 17:13:38.07
>>498
煮たような文字列で試験するしかないね
0501デフォルトの名無しさん2012/02/10(金) 17:19:51.30
>>499
自己紹介乙
0502デフォルトの名無しさん2012/02/10(金) 17:29:15.27
正規表現で足し算はできないでしょうか?

PHPのソースなんですが
array( 'start' => 10.000, 'end' => 10.166 ),
array( 'start' => 11.166, 'end' => 11.414 ),
array( 'start' => 12.414, 'end' => 14.559 ),
などと並んでる部分があり、これらの数値全部に1を足したいのですが
0503デフォルトの名無しさん2012/02/10(金) 17:38:19.38
>>494
(?<1>...)をいっぱい並べて何をやりたいんだ?
0504デフォルトの名無しさん2012/02/10(金) 17:45:37.09
>>498
正規表現の本とか読めば書いてあるから読んでね。本に書いてあることを何度も質問されても困るし。
http://d.hatena.ne.jp/hiront_at_nagoya/20081204/1228394426
こんなグラフ作って論理的に考えると意図しない動作はしなくなるよ。もちろん正規表現を使いこなせてればだけどね。
0505デフォルトの名無しさん2012/02/10(金) 17:47:56.50
キャプチャをサポートしたエンジンは遷移図の通りには動かない。
その通りに動くのはegrepとかごく一部のみ。
0506デフォルトの名無しさん2012/02/10(金) 17:53:01.35
>>502
何をやりたいのかさっぱり分からん。
ソースコードの変換がやりたいのかな?
awkとかLL系の言語使った方がいいんじゃない?
UNIX上ならならシェルスクリプトスレに来い。
0507デフォルトの名無しさん2012/02/10(金) 17:54:23.33
>>505
自分で作るんだから意図した通りの動作になるよ。なんでそんなことも知らない人が横から口出すの?
0508デフォルトの名無しさん2012/02/10(金) 18:00:40.39
>>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を足す、これは固定)をしたい
0509デフォルトの名無しさん2012/02/10(金) 18:12:54.80
うーん、答えが来ない...
これでもちょっとレベル高すぎたかも?
0510デフォルトの名無しさん2012/02/10(金) 18:19:54.24
試しにTwitterで質問レスのURL貼って教えてって流したら20分で回答きた
やっぱりTwitterは早い
2chは遅いから情弱しか使ってないだろうし
情弱が高度情報に回答できないのは当然
0511デフォルトの名無しさん2012/02/10(金) 18:20:43.03
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 ),
0512デフォルトの名無しさん2012/02/10(金) 18:21:48.51
キチガイがわいたか
0513デフォルトの名無しさん2012/02/10(金) 18:22:47.99
結果をはりそこねた

Twitterってそんないいものなのか。始めようかな
0514デフォルトの名無しさん2012/02/10(金) 18:33:11.72
まあでも2chみたいに欲しい情報にまつわる話題を扱うスレにフラっと寄って回答を待つようなことはできないけどね。
欲しい情報を手早く得られる環境の構築・維持に手間がかかる。
0515デフォルトの名無しさん2012/02/10(金) 18:35:39.46
俺もTwitterやってるけど、始めてすぐには回答なんか全く来なかった。
あれってフォロー・フォロワー増えるまで結構時間が必要。(1か月2か月とか)
ただそれがある程度のラインを超えると便利になる。
だから1度きりの質問なんかだと2chのほうが回答もらえる率は高いけど
今後しばらくプログラミングやって情報交換が必要ならTwitter推奨。

基地害はブロックできるし。
0516デフォルトの名無しさん2012/02/10(金) 19:05:23.31
ツイッターは情弱や馬鹿には不向き
0517デフォルトの名無しさん2012/02/10(金) 19:17:13.07
馬鹿や情弱には不向きだが利用者の大半は馬鹿と情弱
0518デフォルトの名無しさん2012/02/10(金) 21:42:58.05
>>517=馬鹿で情弱
0519デフォルトの名無しさん2012/02/11(土) 00:36:51.48
>>486
http://php.net/manual/ja/reference.pcre.pattern.modifiers.php
s (PCRE_DOTALL)
この修飾子を設定すると、パターン中のドットメタ文字は改行を含む全ての文字にマッチします。
これを設定しない場合は、改行にはマッチしません。 この修飾子は、Perl の /s 修飾子と同じです。
[^a] のような否定の文字クラスは、 この修飾子の設定によらず、常に改行文字にマッチします。

つまりPerl準拠の正規表現実装であればオプションやフラグ等に関係なく、
"[^"]*"
で改行コードをまたいだ検索ができるはず
0520デフォルトの名無しさん2012/02/11(土) 04:32:56.23
さすがPHPer
0521デフォルトの名無しさん2012/02/11(土) 21:26:16.26
性器表現
0522デフォルトの名無しさん2012/02/11(土) 21:44:24.30
■□■□■□
□■□■□■
■□■□■□
□■□■□■
■□■□■□
□■□■□■
0523デフォルトの名無しさん2012/02/11(土) 22:50:46.67
嵐の番組ってCMが生理用品ばっかでワロス
0524デフォルトの名無しさん2012/02/12(日) 00:45:38.90
ああ、なるほどなw
言われてみれば生理用品CMに一番適した番組だなw
0525デフォルトの名無しさん2012/02/12(日) 01:07:46.56
/[^a-z]/は半角英字以外という意味ですが、
/^[a-z]/ってどんな意味なんですか?
0526デフォルトの名無しさん2012/02/12(日) 01:10:22.61
>>525
行頭にa,b,...y,zがある行にヒット。

カッコ外の ^ は行頭の意味。
[^words]はwordsという文字の否定。
0527デフォルトの名無しさん2012/02/12(日) 01:13:19.46
>>526
ありがとうございます
0528デフォルトの名無しさん2012/02/12(日) 01:55:21.24
さらっと嘘教えるなw
0529デフォルトの名無しさん2012/02/12(日) 02:59:09.01
>>528
何が嘘なんだよ
0530デフォルトの名無しさん2012/02/12(日) 03:07:42.54
>>1すら読んでないゴミの>>525にまともに答える必要なんかないんだからいいだろ嘘でも
0531デフォルトの名無しさん2012/02/12(日) 04:09:57.63
>>525は何で環境書いてないの? 基地害?
0532デフォルトの名無しさん2012/02/12(日) 04:55:15.49
>>529
誤解するなんてばかだなぁと思うならまだしも、
どこが誤解されたのか理解できないのはまずいよ
0533デフォルトの名無しさん2012/02/12(日) 07:20:37.51
/aac^defg/
0534デフォルトの名無しさん2012/02/12(日) 09:22:53.89
/[a-z]^/の^でも行頭という意味になるのか
文字クラスの説明なのにのwordsという単語を角カッコの中に含めるセンス
a,b,...y,zという表記が唐突に出現する(a,b,...,y,zならともかく)

さらっと嘘というツッコミが入らなかったらもうこのスレ開かないところだった
0535デフォルトの名無しさん2012/02/12(日) 09:28:08.31
>>534
ああ、まあ誤解を生む表現でごめんね…

そこまで言うならきっちり回答書いてよ('A`)
0536デフォルトの名無しさん2012/02/12(日) 10:13:29.42
>>535
こちらもきつく書きすぎた。ごめん
とりあえずこのスレからは卒業するわ
0537デフォルトの名無しさん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準拠ではない極めて例外的な実装
0538デフォルトの名無しさん2012/02/12(日) 11:32:57.78
perl準拠じゃないと例外かよw
0539デフォルトの名無しさん2012/02/12(日) 11:42:33.23
PCRE以外はカス
0540デフォルトの名無しさん2012/02/12(日) 11:53:23.29
regux「君たち、
0541デフォルトの名無しさん2012/02/12(日) 12:01:59.23
>>537
>ごく希に[^(words)]で2文字以上の文字列の否定ができる正規表現実装もあるらしいけど、
そんな変態的なの実在するのか?
0542デフォルトの名無しさん2012/02/12(日) 12:08:26.69
環境も書いてないのにレスできるのがすごいわ
0543デフォルトの名無しさん2012/02/12(日) 12:41:19.79
>>537
嘘はいいすぎだろ、わかりづらいだけ
しかも、あの時点で嘘の内容を書かなかったら嘘なのか本当なのか判断できなくて迷う奴が必ず出てくる
0544デフォルトの名無しさん2012/02/12(日) 13:25:34.35
>>543
>>533
05455372012/02/12(日) 13:30:03.00
同調しただけで私は>>528ではありません

にしてもプログラム板にIDがないのはなぜでしょう
自演で盛り上げる意味のない板だし
無責任な投稿が増えるだけではないかと
0546デフォルトの名無しさん2012/02/12(日) 14:11:57.84
特定IDに粘着する池沼がいるからだろ
一度粘着されると24時過ぎるまでつきまとわれる
0547デフォルトの名無しさん2012/02/12(日) 14:57:08.09
>>543
>>526も迷ってたね
0548デフォルトの名無しさん2012/02/12(日) 15:42:13.98
こんなの初心者用のサイト読んでれば分かってるはずの内容。それを人に聞くことがそもそも間違ってる。
そんな人の相手はしなくていいよ。嘘書くのはまずいと思うけど。
0549デフォルトの名無しさん2012/02/12(日) 15:46:51.85
嘘書くのもありだと思うよ。つかむしろ推奨。
ネットで他人に聞けば何でも解決とか思ってる情報乞食のゴミは一回痛い目をみるべき。
0550デフォルトの名無しさん2012/02/12(日) 18:10:16.39
よし、情報乞食にウソを教えて痛い目にあわせるサイトをつくろう
0551デフォルトの名無しさん2012/02/13(月) 15:30:36.27
>>550
それもありだと思うよ。最近は関連書籍の1冊も買わずにネットで十分とか言うゴミがいるからな。
情報は何でもタダで手に入るのが当たり前と思ってる貧乏人は一度痛い目をみるべき。
0552デフォルトの名無しさん2012/02/13(月) 15:32:11.00
>>550
すぐにはバレないけど後々効いてくるような嘘を書くんだぞ。
0553デフォルトの名無しさん2012/02/14(火) 01:07:02.10
>>550
サイト読んで学習しようと思うような人はここにバカな質問したりしない。
05544862012/02/14(火) 10:37:31.73
>>519
レスありがとうございます。
0555デフォルトの名無しさん2012/02/15(水) 12:57:50.64
性器表現
0556デフォルトの名無しさん2012/02/15(水) 16:39:15.39
GUY出
0557デフォルトの名無しさん2012/02/15(水) 22:15:15.09
性器をGUYが出してるのか
0558hidi and peter2012/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
0559デフォルトの名無しさん2012/02/16(木) 23:16:14.43
人に頼む書き方じゃねえな、スルー。
0560デフォルトの名無しさん2012/02/17(金) 00:14:04.83
(?!BCAA)[A−Z]{4}¥.md
0561デフォルトの名無しさん2012/02/17(金) 03:18:38.64
全角きんもーっ☆
0562hidi and peter2012/02/17(金) 21:26:44.99
> 559
知らなかったら、別に書き込まなくてもいいんだぜ。

> 560
ありがとう。'(?!sudo)\w{4}\.md' で、もうちょい便利に使えた。
pcretestで色々と試すと楽しいな。
0563デフォルトの名無しさん2012/02/18(土) 00:03:16.80
●正規表現の使用環境
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>
0564デフォルトの名無しさん2012/02/18(土) 00:11:54.50
(<h[2-6][^>]*>)(?!<span>)(.*)(?<!</span>)(</h[2-6][^>]*>)
\1<span>\2</span>\3
0565デフォルトの名無しさん2012/02/18(土) 00:46:49.73
>>563
classがある場合「など」もって何よ?
質問する側が仕様をあいまいにするとかありえない
0566デフォルトの名無しさん2012/02/18(土) 00:49:05.49
最近質問者につっかかる奴が多いな
同一人物か?
0567デフォルトの名無しさん2012/02/18(土) 00:52:55.18
なーいふみたいにとがあてわ
さーわるものみなきずつけたー
0568デフォルトの名無しさん2012/02/18(土) 01:09:14.81
つっかかる奴が多いんじゃなくて>>563みたいなゴミが増えたんだろ
曖昧な仕様を提示するとかマジ知能障害

ゴミが増えたらゴミを片付ける奴が増えるのが自然
つっかかる奴を減らしたかったらまず>>563みたいな人間のクズを減らせ
0569デフォルトの名無しさん2012/02/18(土) 01:23:46.84
答えてるやつがいるからいいじゃん。なんとかとハサミは使いよう。
0570デフォルトの名無しさん2012/02/18(土) 01:28:45.66
>>564様
ありがとうございました。

素人丸出しの質問で申し訳ありませんでした。
“など”と書きましたのはidやstyle等のclass以外の属性も考えられると思ったため、
つい曖昧な書き方になってしまいました。
05715632012/02/18(土) 01:30:45.70
メール欄に番号いれるとか、、、
知障と言われても仕方ない。
スレ汚し失礼しました。
0572デフォルトの名無しさん2012/02/18(土) 03:01:24.21
いま秀丸エディタで正規表現使って
あれこれ修正しているけど
おすすめの、正規表現を搭載できるエディタってある?
秀丸よりも優れた奴

Eclipseはまた別。すでに使ってるので
0573デフォルトの名無しさん2012/02/18(土) 04:27:54.67
正規表現ライブラリを変更できるやつか。
さくらは。
0574デフォルトの名無しさん2012/02/18(土) 07:20:52.28
linuxでsed。
0575デフォルトの名無しさん2012/02/18(土) 07:24:39.58
鬼車が使えるエディタがあれば最強だろうけど知らないな
0576デフォルトの名無しさん2012/02/18(土) 07:33:09.51
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
0577デフォルトの名無しさん2012/02/18(土) 10:37:23.75
>>576
高田さん、なんでトリップ使わないの?
0578デフォルトの名無しさん2012/02/18(土) 10:44:15.91
>>577
どうして高田さんだと思うの?
0579デフォルトの名無しさん2012/02/18(土) 13:45:36.73
秀丸のhmjre.dllで全角スペースをサロゲートペアで検索したいのですがどう書くのでしょうか?
0580デフォルトの名無しさん2012/02/18(土) 15:53:38.83
>>579
全角スペースのUnicodeコードポイントは
U+3000だからサロゲートペアじゃないよ
0581デフォルトの名無しさん2012/02/18(土) 17:15:43.60
秀丸の正規表現でx0aとか\uxxxxみたいな漢字で全角スペースを書く場合は
どう書けばよいのでしょうか?
0582デフォルトの名無しさん2012/02/18(土) 21:50:14.41
>>563
いまさらだけど。
h2 -> h2><span
って置き換えればよかったんじゃ
0583デフォルトの名無しさん2012/02/18(土) 22:04:13.43
>>582
>hタグににclassがある場合なども想定されますがそれは引き継ぎたいです。
0584デフォルトの名無しさん2012/02/18(土) 22:39:16.21
>>581
秀丸はライセンス持ってないから試せないけど、
\x8140
\x{8140}
\x81\40
\u3000
のどれかでマッチしませんか?
05854862012/02/18(土) 22:43:49.73
>>554
それで上手く行きましたでしょうか?
もしかしたら正規表現よりもC言語やobjectiv-cの言語仕様が優先されて
ダブルクォートをエスケープするか
ダブルクォートを\x22のような16進コード指定すべきだったかもと
今更ながらに気になってます
0586デフォルトの名無しさん2012/02/18(土) 23:03:10.90
>>583
ああ、引き継ぎたいってそっちだったのか。てっきり挿入するspanに引き継ぐのかと勘違いしてた。
例も見ずにすまんかった。
0587デフォルトの名無しさん2012/02/18(土) 23:07:20.02
>>584
\u{3000}で出来ました!ありがとうございます

最後にこの全角スペースが3000っていう数字になる事はどうやって調べられますか?
0588デフォルトの名無しさん2012/02/18(土) 23:34:51.97
>>587
>\u{3000}で出来ました
本当に出来たのか?
この記法は文字クラス内限定のはずだが...
0589デフォルトの名無しさん2012/02/18(土) 23:39:09.69
>>587
Windows使ってるならIMEパッドでも見れるし、テキストファイルをバイナリエディタで見てもいいし、
http://www.unicode.org/charts/ に行ってもいい(これを見るならIMEパッドで十分ともいえるけど、本家なので)
0590デフォルトの名無しさん2012/02/18(土) 23:51:45.21
>>588
はい、ちゃんと[]野中に書きました
0591デフォルトの名無しさん2012/02/18(土) 23:53:32.21
>>590
ありがとうございます
05925842012/02/19(日) 00:14:44.44
>>587
ごめん\x81\40は誤記なので
\x81\x40
でももう1度試してみて

あと秀丸にはステータスバーに、
カーソル位置のコードポイント表示機能があるみたいだよ
(この画面ショット見る限りではU+形式のUnicodeコードポイント表示されるのかはわからないけど)
http://hide.maruo.co.jp/software/hidemaru6/new5.html
0593デフォルトの名無しさん2012/02/19(日) 00:40:16.13
>>592
多分、581はshift-jisのコード表記はしたくないんじゃないの。
hmjre.dllだと同じ文字を表していても意味が異なるよ。
ex
[\u{3000}-\u{3005]}] //unicode順の範囲指定[ -々]
[\x81\x40-\x81\x58] //shift-jis順の範囲指定[ -々]
0594デフォルトの名無しさん2012/02/19(日) 00:41:17.26
おっと、]がひとつ余分だった
0595デフォルトの名無しさん2012/02/25(土) 16:38:53.37
●正規表現の使用環境
C#

●検索か置換か?
置換

●説明
りんご=20 以外を削除したい

●対象データ
みかん10 りんご20 バナナ30
いちご40 めろん20 りんご20

●希望する結果
りんご20
りんご20

よろしくお願いします
0596デフォルトの名無しさん2012/02/25(土) 16:41:10.77
こちらこそよろしくお願いします
0597デフォルトの名無しさん2012/02/25(土) 18:16:23.54
.*(りんご20).*
\1
0598デフォルトの名無しさん2012/02/26(日) 03:09:03.64
それ複数に対応できてない
0599デフォルトの名無しさん2012/02/26(日) 09:59:59.82
複数文字列の否定は(?!りんご20)みたいな否定先読みが
常套手段だけど、今回みたいな否定箇所以外を全置換には対処できないね

>>537のいう文字クラス内での否定文字のグルーピングが
C#(.net framework)の正規表現でも使えれば簡単なんだけどね
0600デフォルトの名無しさん2012/02/26(日) 10:25:58.34
>>595
perlの正規表現ならワード境界の¥b使って

s/¥b(?!りんご20)¥S+[^¥S¥n]*//g

でいけるけどね。C#はわからん。
0601デフォルトの名無しさん2012/02/26(日) 13:07:26.58
>>595
Regex.Matchesメソッドを1行ずつforeachで回して
マッチした単語を1行毎に連結していけば
とりあえず結果は同じになるんじゃないかと

・・・そういう妥協はだめ?
0602デフォルトの名無しさん2012/02/26(日) 14:30:46.84
>>595
これ "りんご=20" と改行以外を削除だよね。
1行辺りの "りんご=20" の数を数えて "りんご=20" をn個並べる処理をforeachすればいいんじゃない?
0603デフォルトの名無しさん2012/02/26(日) 17:38:21.92
正直一番簡単なのは
1:りんご20を他で使ってない文字か記号に置換
2:その文字以外全部空文字に置換
3:その文字をりんご20に置換
だと思うよ
なんでも無理に一回で済ますのがいいことなわけじゃないしさ
0604デフォルトの名無しさん2012/02/26(日) 17:52:43.21
そもそも、 あおりんご20 の場合はどうなるのだ。
0605デフォルトの名無しさん2012/02/26(日) 19:11:05.43
* おおっと *
0606デフォルトの名無しさん2012/02/27(月) 18:34:09.00
問い合せフォームから来たメールアドレスを正規表現を用いて抽出したいのですが
秀丸メールを使っておりメール全文をテキスト化したものの中に以下の文章が含まれています

▼メールアドレス
[email protected]

▼メールアドレスという文字列の下にある行だけを検索することは可能でしょうか?

メールアドレスにマッチする正規表現を使用するとヘッダー内のよくわからないアドレスまで抽出されてしまい
とても面倒くさいのでどうにか文章の下にある行のみを抽出という手段を取りたいのです

どうか解決策をご教授ください
0607デフォルトの名無しさん2012/02/27(月) 18:45:49.84
(?<=^▼メールアドレス$\n)^.*$
0608デフォルトの名無しさん2012/02/27(月) 22:49:40.74
>>607
レスありがとうございます

エディタは秀丸エディタを使用していまして
grebで教えて頂いた正規表現を入力すると

HmJre.dllの正規表現で前方一致/不一致"(?<!xxx)","(?<=xxx)"では改行文字を使うことが出来ません。

というエラーが出て思うように動作しませんでした・・・
0609デフォルトの名無しさん2012/02/27(月) 23:07:03.41
(?<=^▼メールアドレス)$\n^.*$

改行も引っかかっちゃうけど検索するだけならいいかな
0610デフォルトの名無しさん2012/02/28(火) 05:03:46.79
>>609
レスありがとうございます

あとで取り除くので改行も全然引っかかっていいのですが
(?<=^▼メールアドレス)$\n^.*$
で検索するとなにも検索に引っかかりませんでした

環境は
Win7 64bit
秀丸エディタ64 v8.13 Beta7
HMJRE.DLL v3.41
です

ああああああああああああああ
ああああああああああああああ

▼メールアドレス
[email protected]

いいいいいいいいいいいいいい
いいいいいいいいいいいいいい

元となる文章はこんな感じです
よろしくお願いします
0611デフォルトの名無しさん2012/02/28(火) 06:11:47.05
>>610
秀丸の独自仕様をどこかで見たなあ...と思ったらここだったか
>>197-205あたりの
http://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/190_CmdSearch_Regular_ReturnCodeLimit.html
を参考にすれば何とかなるんじゃないかな
0612デフォルトの名無しさん2012/02/28(火) 09:48:11.08
正規表現使うんなら秀丸はないわ。
0613607,6092012/02/28(火) 19:47:54.11
秀丸は環境ないからわからん
詳しい人にまかせた
0614デフォルトの名無しさん2012/02/29(水) 00:15:31.04
>>606
検索でいいの? Grepじゃなくて?
検索なら
(?#fulllinematch)(?\1)▼メールアドレス\n(.+)$
で可能。
ただし秀丸メールv5.70以降に限る。っつーか質問時はバージョン書くもんだぜ…

これはもう秀丸の独自仕様の話題なので、もし続きがあるなら秀丸スレへどうぞ。
http://anago.2ch.net/test/read.cgi/software/1315839729/
0615デフォルトの名無しさん2012/02/29(水) 00:16:23.90
>>614
こっちだった
http://anago.2ch.net/test/read.cgi/software/1250170096/
0616デフォルトの名無しさん2012/02/29(水) 00:18:13.93
>>610
ん、バージョン書いてあったのか…って秀丸エディタ? メールじゃなくて?
エディタ v8.13 なら (?#fulllinematch) 使えるがメールはどうだったかな…
連投スマソ
0617デフォルトの名無しさん2012/02/29(水) 00:34:51.64
ここはプログラミング技術の板だから、
プログラミングそのものに関係ないアプリの使い方はアプリ板でやりなよ。
たとえプログラムをエディットするのだとしても。
0618デフォルトの名無しさん2012/02/29(水) 02:43:04.02
皆様レスありがとうございます

>>614
ありがとうございます
(?#fulllinematch)(?\1)▼返信\n(.+)$
で検索対象とマッチすることは出来ましたが
Grepでその部分だけ取り出すということは出来ませんでした・・・

検索ではなくてGrepの対象としてマッチさせたいです

確かにプログラムに関係はありませんでした
>>614さんに誘導して頂いたスレでもう一度質問してみます
スレ汚し失礼いたしました
0619デフォルトの名無しさん2012/02/29(水) 06:45:09.30
^http://live.nicovideo.jp/watch/(lv[0-9]+)$

^http://live.nicovideo.jp/watch/(co[0-9]+)$

これってひとつにまとまらない?
0620デフォルトの名無しさん2012/02/29(水) 06:47:34.53
まとま
0621デフォルトの名無しさん2012/02/29(水) 07:10:20.69
>>619
環境書こうぜ
環境不明だから最大公約数の正規表現
^http:\/\/live\.nicovideo\.jp\/watch\/(lv|co)[0-9]+$
0622デフォルトの名無しさん2012/02/29(水) 07:53:10.90
C#のRegexですけど
0623デフォルトの名無しさん2012/02/29(水) 21:20:22.34
>>622
後出しは困るんですけど
0624デフォルトの名無しさん2012/02/29(水) 21:22:26.28
"^http://live.nicovideo.jp/watch/((lv|co)[0-9]+)"

でいけたです。
0625デフォルトの名無しさん2012/02/29(水) 21:53:01.50
やってやるです。
0626デフォルトの名無しさん2012/03/01(木) 00:46:21.06
>>624
実害ないけど外側の括弧が無意味な件
0627デフォルトの名無しさん2012/03/01(木) 01:00:16.49
>>624
.をエスケープしないとか見てるとイライラする
職場でこういう正規表現見つけたら速攻バグ登録するんだけど、
書いた奴は正常系でテストして問題なかったとか
自分の無知を認めない言い訳ばかり
0628デフォルトの名無しさん2012/03/01(木) 01:06:37.19
バグレポートの仕方が悪いんだろ
ちゃんとどういう問題があるか認識させてやれよ
0629デフォルトの名無しさん2012/03/01(木) 01:14:56.50
.NETだろ
0630デフォルトの名無しさん2012/03/01(木) 01:45:00.45
>>626
外側はURLの可変部分だからいかにも後で参照しそうな箇所じゃないか
そこらへん質問では示されてないけど
0631デフォルトの名無しさん2012/03/01(木) 19:16:48.23
>>630
その辺を考えてる人なら?:も使うよ
だからただの余分な括弧だと思う。
0632デフォルトの名無しさん2012/03/04(日) 00:15:07.64
質問させてください、環境はWSH(JScript)です
2chのdatファイルは1行目が↓こうなってますが
名前<>メル欄<>日付 ID<> 本文 <>スレタイ 改行
スレタイだけを抜き出すにはどうしたらいいでしょうか?
↓こんなのしか浮かびません…
line = str.replace(/<>(.*?)$/,"$1");
0633デフォルトの名無しさん2012/03/04(日) 00:17:53.46
それを実行したらどうなった?
0634デフォルトの名無しさん2012/03/04(日) 00:26:17.22
>>633
一行丸々抜き出されました…
0635デフォルトの名無しさん2012/03/04(日) 00:53:23.20
これで一応行けました、強引?
title = str.replace(/(?:.*?<>.*?<>.*?<>.*?<>)(.*?)$/,"$1");
もっといい方法あれば教えてください
0636デフォルトの名無しさん2012/03/04(日) 01:01:21.24
>>635
^(?:.+?<>){4}(.+)$
0637デフォルトの名無しさん2012/03/04(日) 01:12:39.05
>>636
ありがとうございます!

スレタイが空文字はありえないですよね、確かに
ただ、メル欄(名前も?)は空文字がありえるんですよ…
0638デフォルトの名無しさん2012/03/04(日) 01:15:23.62
あ、これでいいのか。>>636さんありがとう
^(?:.*?<>){4}(.+)$
0639デフォルトの名無しさん2012/03/04(日) 13:39:30.67
ほんと2chまとめ系の質問多いな。
0640デフォルトの名無しさん2012/03/04(日) 14:40:56.64
でも2chで業務に関わる正規表現を相談するわけにもいかないし
0641デフォルトの名無しさん2012/03/04(日) 18:18:09.44
ただでアフィの手伝いするなんてお人好しだな。
06426322012/03/04(日) 19:46:44.88
あ、一応弁解しとくと私はアフィサイトとかじゃないですよ
気になったスレをhtml変換して保存したいという、正規表現の練習も兼ねた趣味です
誤解があったらすみません
そもそもまとめをJScriptでちまちま変換してる人いるのかな?
0643デフォルトの名無しさん2012/03/04(日) 22:03:16.25
そうか、2ちゃんねるまとめサイトか…
0644デフォルトの名無しさん2012/03/04(日) 22:26:36.94
>>642
ちまちました変換をしてる人がいるかどうかじゃなく、
その変換のやり方を聞いてくる人に、2chまとめ系がおおいってことだわ。
0645デフォルトの名無しさん2012/03/04(日) 22:27:38.98
ついでにいうと、スレタイを取得するために正規表現を使う人は少ないと思う。
正規表現がいいよっていわれたのかもしれないけど。
0646デフォルトの名無しさん2012/03/07(水) 16:52:50.44
質問です

phpのpreg_replaceで文字列を入れ替えたいのですが

<a href="mailto:[email protected]">問い合せ</a>

の[email protected]のみを入れ替えるにはどのような正規表現を使えば出来るでしょうか?

よろしくお願いします

06476462012/03/07(水) 16:54:14.75
ちなみにアドレスは[email protected]固定とは限りません
よろしくお願いいたします
0648デフォルトの名無しさん2012/03/07(水) 18:51:22.57
>>646
メールアドレスであることに拘らなければいいだけの話
mailto:の後ろにメールアドレス以外が来ることなんて普通ないだろ?
とりあえず/"mailto:.+?"/とかでいいんじゃね
0649デフォルトの名無しさん2012/03/07(水) 19:19:21.86
>>648
レスありがとうございます
/"mailto:.+?"/とするとmailto:までマッチしてしまうのですが
メールアドレスのみマッチさせるのは不可能でしょうか?

よろしくお願いいたします
0650デフォルトの名無しさん2012/03/07(水) 20:52:24.59
簡易的なチェックで良ければ、
「メールアドレス 正規表現」でググれば、例示がいっぱいあるよ。
0651デフォルトの名無しさん2012/03/07(水) 22:47:27.20
>>649
>>3
> 【 初心者 】 正規表現 【 入門 】
> http://funcchan.blog16.fc2.com/
0652デフォルトの名無しさん2012/03/08(木) 04:02:28.94
>>649
(?<="mailto:)[^"]+
かな
0653デフォルトの名無しさん2012/03/08(木) 16:31:53.87
[email protected] のboku部分とjitakusa-ba部分を抽出する
正規表現を /(.*)@(.*)/ と書いたのですがちょっとエッチだなと思いました。
0654デフォルトの名無しさん2012/03/08(木) 20:00:04.53
>>653
メールアドレスはシンプルな正規表現では書けないんだ!
現実を受け入れろ!
0655デフォルトの名無しさん2012/03/08(木) 21:20:12.15
メールアドレスが正しいかどうかはかけないけど、アカウントとドメインを分割するのには>>653である程度大丈夫。
"nanasi@home"@example.com
には対応できないけど、別にいいと思う。
0656デフォルトの名無しさん2012/03/08(木) 21:46:59.98
>>653でも最長一致優先探索ならそれは処理できるね。
(.*)@([^@]*)とするとアルゴリズムに関係なくましになるかね。
0657デフォルトの名無しさん2012/03/09(金) 00:35:53.46
どうせならこうするのが正解でしょ
([^@]+)@([^@]+)
0658デフォルトの名無しさん2012/03/09(金) 00:49:12.02
([^@]+)@([^@]+) <ブヒブヒ
0659デフォルトの名無しさん2012/03/09(金) 03:57:50.08
>>657
改悪
0660デフォルトの名無しさん2012/03/09(金) 16:01:56.77
>>649
だから、分かんないんだから無理しないで
"mailto:置換前の文字"
を
"mailto:置換後の文字"
に置き換えれば分かりやすくて確実だろって言ってるの
お前の目的はmailto:の後ろを置換することであって正規表現でメールアドレスに確実にマッチさせることじゃないだろうが
0661デフォルトの名無しさん2012/03/10(土) 17:07:42.45
>>660
それは極端だ
0662デフォルトの名無しさん2012/03/10(土) 17:48:08.06
そうか?
0663デフォルトの名無しさん2012/03/10(土) 21:28:51.98
目的が達成されれば良いわけだから、俺はありだと思うけどな
0664デフォルトの名無しさん2012/03/10(土) 21:30:46.34
俺もそう思う。目的と手段を間違えないようにすることは大切だ
0665デフォルトの名無しさん2012/03/10(土) 23:02:06.25
「メールアドレスを拾いたい」
のか、
「mailto:○○ を置換したいのか」
の違いでしょ。

>>660の案に自分も一票。
0666デフォルトの名無しさん2012/03/10(土) 23:51:43.33
>>664
プログラマと呼ばれる人たちには案外それを間違う人が多い気がする
だが新しい発想てのは稀にそういうとこから生まれたりするから否定はしない
0667デフォルトの名無しさん2012/03/11(日) 01:30:19.58
「結果は一緒ですよ?」って言っても「いやいや、ダメだよ」っていう人に職業は関係ない
不慣れな人だからこそ「一緒ならやっといてよ」って感じで無知な押し付けをする人もいる
0668デフォルトの名無しさん2012/03/14(水) 17:47:55.35
秀丸エディタのgrep(HMJRE.DLL V1.79)で
"hoge"という単語を検索するときに
'.'に続くもの以外を全て検索したいときの書き方を教えてください。

" hoge" ",hoge" 等は検索したいけど
".hoge"は検索したくありません
0669デフォルトの名無しさん2012/03/14(水) 18:13:18.47
否定戻り読みを使う
(?<!\.)hoge
直前に\.が来ないhoge

サポートされてない時は[^.]hoge|^hogeで我慢
0670デフォルトの名無しさん2012/03/14(水) 18:18:27.81
>>669
ありがとうございます。上手く行きました。
0671デフォルトの名無しさん2012/03/15(木) 03:24:26.09
sedです

foo
bar
*piyo
*hoge
*zieg
kero
piyo
のような文章があるとして、先頭にアスタリスクがついている部分を別記号で囲みたいです。
foo
bar
[
*piyo
*hoge
*zieg
]
kero
piyo

sedのスクリプトファイルで書いているのですが複数行にまたがるマッチングをこなしてくれません
どうか御教示願います。
0672デフォルトの名無しさん2012/03/15(木) 16:52:40.88
awk だが
awk '{ if ($0 ~ /^\*/) { if (!flag) print("["); print($0); flag = 1; } else { if (flag) print("]"); print($0); flag = 0; } }'
0673デフォルトの名無しさん2012/03/15(木) 16:56:41.39
>>671
sedスレへ
http://toro.2ch.net/test/read.cgi/unix/1085730992/
0674デフォルトの名無しさん2012/03/15(木) 17:32:39.72
perlだが
perl -0777pe "s/((?:\*.*?\n)+)/[\n$1]\n/g"
0675デフォルトの名無しさん2012/03/15(木) 17:41:29.31
もっと短くしなさい
0676デフォルトの名無しさん2012/03/15(木) 18:06:33.62
>>674
a*hoge
0677デフォルトの名無しさん2012/03/15(木) 18:18:06.63
>>676
perl -0777pe "s/((?<!a)(?:\*.*?\n)+)/[\n$1]\n/g"
0678デフォルトの名無しさん2012/03/15(木) 18:21:22.40
違うそうじゃない
0679デフォルトの名無しさん2012/03/15(木) 18:21:41.49
>>677
foo*hoge
0680デフォルトの名無しさん2012/03/15(木) 22:59:16.86
ワンライナーが集団で現れた
0681デフォルトの名無しさん2012/03/15(木) 23:25:50.72
>>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;
0682デフォルトの名無しさん2012/03/16(金) 01:17:05.36
Unicodeからむと正規表現が長くなるね

perl -CS -pe 's/(?<=\p{Latin})\p{Zs}+(?=\P{Latin})//g;s/(?<=\P{Latin})\p{Zs}+(?=\p{Latin})//g' <input
0683デフォルトの名無しさん2012/03/16(金) 01:26:04.67
なんで2回してるの?
0684デフォルトの名無しさん2012/03/16(金) 01:32:24.07
あ、そういうことか
0685デフォルトの名無しさん2012/03/16(金) 18:26:27.29
Windows PowerShellから.Netのクラスを使用してチカン

$v = "会場[大磯ロングビーチ]"
[System.Text.RegularExpressions.Regex]::Replace($v, "^会場\[(.+)\]$","$1")

期待する結果:"大磯ロングビーチ"
実際:""

どうしてですか?
"大磯ロングビーチ"ってチカンするにはどうしたらいいのでしょうか
0686デフォルトの名無しさん2012/03/16(金) 20:54:07.96
大磯ロングビーチに行って女の子のオパイをモミモミすれば良いよ


タイホ
0687デフォルトの名無しさん2012/03/16(金) 22:13:07.37
>大磯ロングビーチ
もう存在しない。
0688デフォルトの名無しさん2012/03/16(金) 23:11:23.76
>>685
""で囲んだ文字列は変数展開が有効になってる
抑制したいときは '' を使う(もしくは`)

[System.Text.RegularExpressions.Regex]::Replace($v, '^会場\[(.+)\]$','$1')

ちゅーか、$v -replace '^会場\[(.+)\]$','$1' でええやん
もしくは[Regex]::Replace($v, '^会場\[(.+)\]$','$1')
0689デフォルトの名無しさん2012/03/20(火) 22:21:48.94
<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
の部分を抜き出すにはどうすればいい?

数字とかは毎回変わるんだけど
0690デフォルトの名無しさん2012/03/20(火) 23:41:40.87
que.innerHTMLで/publish lv8.....f4v が取れるから後は好きなようにする
0691デフォルトの名無しさん2012/03/20(火) 23:45:01.69
>>689
>>660

変わらないところはべた書きして「毎回変わる」ところは.+?にでもしとけ
/<que.+?(\/content\/.+?f4v\/)<\/que>/
0692デフォルトの名無しさん2012/03/21(水) 07:11:36.55
>>691
それだと可変の文字列内にたまたまf4vの文字列が出てきたらNG
.+で最長マッチにしておくか可変の文字列内に記号(.)が出てこない仕様ならば
/<que.+?(\/content\/.+?\.f4v\/)<\/que>/
の方がよさそう
0693デフォルトの名無しさん2012/03/21(水) 07:38:17.77
できました
0694デフォルトの名無しさん2012/03/21(水) 12:53:29.40
わざわざqueとか調べなくても/contentから<までをとればいいんでないの
0695デフォルトの名無しさん2012/03/24(土) 08:11:28.17
Objective-CのNSRegularExpressionで、
行頭の半角スペース列を置換しようとして@"^ +"と書いたのですが、文字列の最初しか行頭と認識してくれないらしく、
複数行にまたがる文字列の各行頭のスペースが置換できないので、改行文字に続く次のスペースも検出しようとして
@"^ +|\\n +"
と書くと、改行文字も含めて置換してしまうため、マッチ部分をキャプチャする()を使って
@"^( +)|\\n( +)"
としたのですが、
(2147483647,0)という文字列の外の範囲がマッチされてしまい、置換しようとしてエラーとなってしまいます。
文字列途中も含めて、行頭の半角スペース列のみを置換するためにはどのようなパターンを使うのが適切でしょうか?
0696デフォルトの名無しさん2012/03/24(土) 08:46:28.26
>>695
http://developer.apple.com/library/mac/documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html

のTable 4 Flag Optionsを参考に、
mフラグを有効化して正規表現を複数行モードで
動作させればうまくいくかも
0697デフォルトの名無しさん2012/03/24(土) 10:41:37.22
>>696
ありがとうございます!出来ました。
0698デフォルトの名無しさん2012/03/24(土) 10:43:25.54
Comp
http://technet.microsoft.com/ja-jp/library/cc756036(v=ws.10).aspx
0699デフォルトの名無しさん2012/03/24(土) 11:34:08.06
半角かっこはencodeして欲しい。
http://technet.microsoft.com/ja-jp/library/cc756036%28v=ws.10%29.aspx
0700デフォルトの名無しさん2012/03/25(日) 01:29:15.20
700GET
0701デフォルトの名無しさん2012/03/25(日) 04:06:16.60
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は解放されるのでしょうか?
0702デフォルトの名無しさん2012/03/25(日) 04:47:56.03
誤爆か
0703デフォルトの名無しさん2012/03/25(日) 12:40:22.05
すみません、前と似たような質問なんですが
Objective-CのNSRegularExpressionで、
数値実体参照を置換しようとして、@"&#[0]*([1-9][0-9]*);?"と書いたのですが、
&#xまた&#Xで始まる16進表記に対応できないので、16進表記にも対応しようとして
@"&#[0]*([1-9][0-9]*);?|&#[xX][0]*([1-9A-Fa-f][0-9A-Fa-f]*);?"
としたのですが、
やはり(2147483647,0)という文字列の外の範囲がマッチされてしまい、置換しようとしてエラーとなってしまいます。
また、エラーが出なかったとしても10進か16進かがわからないので、再度プリフィクスが&#か&#xか調べないといけないので効率が悪い感じです。
10進も16進もマッチし、かつ10進か16進かを識別するためにはどのようなパターンを使うのが適切でしょうか?
07046962012/03/25(日) 13:38:44.57
>>703
10進にマッチした時と16進にマッチした時で置換後の文字列を変える目的や
それぞれどんな文字列に置換したいのがわからないと何とも言えません

多くの正規表現実装では()でグルーピングする度に
$1から連番で「キャプチャ」され、置換後文字列として$1や$2…でキャプチャされた部分を取り出せますが、
今回のケースで有用かが不明です

$nの詳細は>>696のリンク先のTable 3 Template Matching Format参照
0705デフォルトの名無しさん2012/03/25(日) 14:02:53.15
>>704
ありがとうございます。
10進と16進で処理を変えたいのは、マッチした部分をキーにしてディクショナリから置換後の文字列(というか文字)を取り出すさい、
16進のキーはディクショナリに用意していないので、いったん10進文字列に変換してから同じようにディクショナリにアクセスさせたいためです。(変換メソッドは10進か16進か自動判別してくれないのでここで処理を分ける他ありません。)
$の使い方についてなのですが、キャプチャされた部分を取り出して$表記を用いた別の文字列(template)にキャプチャした部分を埋め込めるというのは分かるのですが
別の文字列のある部分を$〜に置換するのではなくて、$でキャプチャした元の文字列自体を置換したいので、今回使えるかどうかはよくわかりませんでした
いろいろやってみたところrangeがぶっ飛んだ値になるのは、()を|などで分けて2つ以上設定した際に、マッチしなかった()について対応するインデックスのrangeのlocationがNSIntegerの最大値に設定されてしまうらしく
その値で分岐して、locationがNSIntegerMAXではないほうをキーとして取り出し置換することでとりあえず上手くいきました。
0706デフォルトの名無しさん2012/03/25(日) 14:54:16.01
[xX]もキャプチャすれば判断できそうだけど。
置換対象はマッチした文字列全体でいいのでは。その環境使ったことないので、もし全体が取れないのなら全体をキャプチャ
07076962012/03/25(日) 15:36:35.36
>>706
マニュアル読む限り、$0でマッチした文字列全体みたい
自分も環境がないので試してはいませんが
0708デフォルトの名無しさん2012/03/25(日) 20:21:11.43
>>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
文字参照じゃなかったよ
0709営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 14:51:01.91
(でないかつ\Sを表すにはどうすれば良いのでしょうか?
0710営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 15:08:16.83
>>709
(?!()�S
0711営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 15:12:30.04
[^\s\(]
0712営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 15:42:30.15
あぁなるほど盲点でした。\sは\Sでないものですから「AでないかつBでない」という形[^AB]に直せますね。上手く行きました。
いつでも\sに対する\Sが存在するわけではないのではないか、そのような場合
|に対する&のようなものが必要になるのでは([^)] & [\S])と思いましたが、
文字クラスには必ず対する存在があるので必要ない、ということなのでしょう。
0713営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 15:42:52.60
>>710,711
御二方レス有難うございました。
0714営利利用に関するLR審議中@詳細は自治スレへ2012/03/30(金) 22:44:31.11
正規表現でおk
0715営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:03:58.38
広告関係の削除フィルタを書いています。

<script\s[^>]*?google-analytics.com/ga.js

と始まるフィルタがあったのですが、*? の意味が分かりません。
[^>]の0回以上の繰り返し が 0回か1回 ってことですか?
0716営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:16:32.79
正規表現の「最短一致」だ
『[探索対象文字]*』だと、条件にマッチする文字列のうちなるべく長いものを取り出そうとする
『[探索対象文字]*?』というふうに、アスタリスクの後ろにハテナをつけると、最短のものを取り出す
0717営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:19:53.36
あ、書き忘れたけど、最短一致は
正規表現エンジンによっては未対応のものもある(秀丸とか)のでそこだけ注意
0718営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:30:06.16
最短一致に対応してないってどんだけ糞なんだよwww
そんなの正規表現って言わねーよww
0719営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:31:07.07
.*? で足りそうなんだけどなんで [^>]*? にしてあるんだろう
0720営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:46:41.93
謎が解けました。ありがとうございました。
0721営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 18:58:43.77
>>719
それだと意図しない結果が出ることがある
[^>]*? も不十分ではあるけど、少なくとも .*? よりは src属性値が返ってくる可能性が高い
0722営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 19:16:32.20
>>721
ああそうか。<script src="..." />google-analytics.com/ga.jsとかにマッチしたらまずいもんね
どうもありがとう
0723営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 20:27:59.87
>>718
grepことglobal regular expression printさんに謝れ
0724営利利用に関するLR審議中@詳細は自治スレへ2012/04/01(日) 22:54:42.17
>>718
findstrだけど何か質問ある?
http://technet.microsoft.com/ja-jp/library/cc732459%28v=ws.10%29.aspx
http://www.atmarkit.co.jp/fwin2k/win2ktips/511findstr/findstr.html
0725営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 03:41:10.02
>>718
実に正しい姿だよ。
拡張正規表現がメジャーになりすぎただけで
0726営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 09:18:06.54
>>725
これだけメジャーになった今では、そっちが標準。
古来の奴はもはや「機能縮小版」に過ぎない。
0727営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 14:10:03.78
正規表現もSQLと同じ道を歩んでいる気もするな。
0728営利利用に関するLR審議中@詳細は自治スレへ2012/04/02(月) 14:16:16.81
>>727
こんなスレが役に立つこと自体、困ったことだ。
0729営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 11:07:26.03
超初心者質問で申し訳ないのですが、

javascriptで、
ABC|DEF|GHI|JKL 等を検索した時に一致した文字列全てを得る方法はありますか?
更にできればABCとGHIがマッチした場合に、0,2の値が取れれば嬉しいです。
0730営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 11:41:09.12
"ABC".match(/(ABC|DEF|GHI|JKL)/);
RegExp.$1; // ABC
0731営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 12:23:09.94
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]
0732営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 21:36:39.59
正規表現スレなのにロジックが入るとはこれ如何に
0733営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 22:45:26.67
クソみたいなレスしちゃってw
0734営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 23:20:22.31
スルーされにくい質問のテンプレと例

●正規表現の使用環境
C#

●検索か置換か?
検索

●説明
全角の数字を無視したい

●対象データ
123 123

●希望する結果
123

\d+と書いたら123と123がマッチしますが
123は除外するにはどう書けば良いですか?
0735営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 23:26:45.27
意味のない改行はやめてくれ。
0736営利利用に関するLR審議中@詳細は自治スレへ2012/04/03(火) 23:35:50.91
>>734
[0-9]+
0737営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 00:18:57.65
jane styleで「^^」という顔文字?を弾くにはどうしたらいいでしょうか?
\^\^はダメでした
0738営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 00:38:58.69
>>737
\^\^で合ってるはず。レスあぼーんしたいなら、NGExで
NGWord 正規(含む) \^\^
0739営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 00:49:12.78
>>737
全角文字も
0740営利利用に関するLR審議中@詳細は自治スレへ2012/04/04(水) 02:48:09.08
>>738
>>739
有難うございました
0741営利利用に関する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)
0742営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 13:25:01.88
説明がおかしかったので訂正
●説明
×指定範囲内に文字列が含む物を置換したい
○括弧内に特定の文字列が有れば対応する括弧を装飾したい
0743営利利用に関する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;
0744営利利用に関するLR審議中@詳細は自治スレへ2012/04/07(土) 14:54:40.49
>>743
ありがとうございます!
ちなみにもし範囲指定記号が単一文字では無いケースではどのようになるのでしょうか?
例えば…
0745営利利用に関する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>
0746営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 13:58:42.73
タグのネストを扱わなければいけない時点で正規表現では無理だろ。
0747営利利用に関するLR審議中@詳細は自治スレへ2012/04/09(月) 17:25:29.56
>>745
PCREは再帰参照使えるからネストのマッチはできる。
でも、置換するためにタグの名前を保存するのは無理じゃないかな。

あと、最後の例だけ性質が違うんだよね。
>>741の書き方で言えば、
((CCC)CCC(CCC)) → (*(*CCC*)CCC(*CCC*)*)
に対応させる必要がある。>>743ではできないよね。
0748デフォルトの名無しさん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を出しているだけでホスト名うんたらは無視してもらって大丈夫です
よろしくお願いします
0749デフォルトの名無しさん2012/04/15(日) 03:12:03.83
http://www\.google\.com/.*でいいだろ
0750デフォルトの名無しさん2012/04/15(日) 03:21:32.75
>>749
レスありがとうございます

My Regex Tester
http://myregextester.com/index.php

でチェックしたのですが
Match Pattern
http://www\.google\.com/.*

Source Text
http://www.google.com/

でマッチしませんでした

なにか足りない物あるんでしょうか?
0751デフォルトの名無しさん2012/04/15(日) 03:24:11.30
http:\/\/www\.google\.com\/.*
じゃあこれ
0752デフォルトの名無しさん2012/04/15(日) 03:27:48.05
>>751
出来ました!

ありがとうございます!
0753デフォルトの名無しさん2012/04/18(水) 00:38:23.88
123<span>abc</span>def</span>aa
↓
123<span>abc</span>defaa

このようにhtmlタグで閉じられていないタグを削除する正規表現はどのように書けばよいのでしょうか?
0754デフォルトの名無しさん2012/04/18(水) 01:43:58.71
無理
0755デフォルトの名無しさん2012/04/18(水) 10:31:23.14
それは無理。DOMとかでも、そもそも論理構造が破綻してるやつには無理。
0756デフォルトの名無しさん2012/04/18(水) 13:22:14.61
$data = "123<span>abc</span>defaa";
$data =~ s|(</.*?>[^<]*?)</.*?>|$1|g;
print $data;
#=> 123<span>abc</span>defaa
0757デフォルトの名無しさん2012/04/18(水) 15:08:40.48
>>756
hoge<span>123<span>abc</span>def</span>aa
0758デフォルトの名無しさん2012/04/18(水) 16:19:58.10
●正規表現の使用環境
Firefox 3.6.28の*.uc.js

●検索か置換か?
検索?置換?

●説明
・以前、別のスレでAのURLをBのように、v=以外のパラメータを消すものを書いてもらいました。
 A: http://www.youtube.com/watch?v=abcdef123456&feature=related&etc=sexample
 B: http://www.youtube.com/watch?v=abcdef123456
・正規表現
 [/^(http:\/\/(\w+\.)?youtube\.com\/watch).*[?&](v=[^&#]+).*/, '$1?$3']

今回は別のURLからパラメータを消したいです。

●対象データ
http://www.forest.impress.co.jp/docs/news/20120418_527251.html?ref=rss

●希望する結果
http://www.forest.impress.co.jp/docs/news/20120418_527251.html


※このようにしてみたのですが、上手くいきませんでした。
var patterns = [
//置換したいURLパターンを記述
[/^(http:\/\/(\w+\.)?youtube\.com\/watch).*[?&](v=[^&#]+).*/, '$1?$3'],
[/^(http:\/\/www\.forest\.impress\.co\.jp\/docs\/news\/)[0-9]_[0-9]\.html\?ref=rss, '$1']
];
0759デフォルトの名無しさん2012/04/18(水) 16:28:50.29
[/^(http:\/\/www\.forest\.impress\.co\.jp\/docs\/news\/[0-9]_[0-9]\.html)\?ref=rss, '$1']
こうじゃない?
0760デフォルトの名無しさん2012/04/18(水) 16:33:01.21
>>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']
07617582012/04/18(水) 16:41:28.31
>>759
早速ありがとうございます!
[/^(http:\/\/www\.forest\.impress\.co\.jp\/docs\/news\/[0-9]*_[0-9]*\.html)\?ref=rss/, '$1']
とアスタリスクと/を足したらできました。

>>760
早速ありがとうございます!
教えて頂いたもので無事できました。
*より+が正しい?よりよい?みたいですね。
[/^(http:\/\/www\.forest\.impress\.co\.jp\/docs\/news\/[0-9]+_[0-9]+\.html)\?ref=rss/, '$1']
/はドジってました。
教えてもらうまで気づかず。
$数字もよくわからなかったんですが、色々分かりやすく説明してもらったので為になりました。

おふたりともどうもありがとうございました。
0762デフォルトの名無しさん2012/04/22(日) 12:13:29.18
VB.NETで正規表現でURLだけ抽出するものを作りたいのですが
完成した物を使うとTwitterのURLの処理だけ変な物になってしまいます

https://twitter.com/#!/utadahikaru

を対象にすると

https://twitter.com/

のみしかマッチしません

すべてマッチするようにはどうすればいいのでしょうか?
0763デフォルトの名無しさん2012/04/22(日) 12:19:02.09
馬鹿には無理
0764デフォルトの名無しさん2012/04/22(日) 12:32:46.72
https?://[^ ]+
0765デフォルトの名無しさん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
^
以上よろしくお願いします。
0766デフォルトの名無しさん2012/04/23(月) 19:38:29.88
日本語でおk
0767デフォルトの名無しさん2012/04/23(月) 20:15:30.90
否定先読み、否定戻り読みで-userつければいいんじゃないかな、、たぶん。
0768デフォルトの名無しさん2012/04/23(月) 20:45:35.90
>>765
^((?!user).)*-(ring|history)$

もうちょい素直に説明してくれよ
テンプレのおかげで読み取れるけど説明だけだと意味不明だわw
0769デフォルトの名無しさん2012/04/23(月) 21:09:19.59
特定の文字列Aがuserの場合の例、って書いてくれてたら分かりやすかったね
07707652012/04/23(月) 21:09:36.74
>>766
(? )系は使えないようです。regexpエラーになりました
07717682012/04/23(月) 21:15:34.57
emacs-lispは環境ないから検証できないんだよね
分かる人待ち
0772デフォルトの名無しさん2012/04/23(月) 21:52:39.92
さっぱりわからんけど、現状の検索にマッチしたあとで、
re-search-backwardってやつでuserを探して、見つからなければおkってすればいいんでない
07737652012/04/23(月) 22:16:02.62
>>772
自分で書くコードならそうしますが、既存パッケージへわたすregexpなので、それができないのです。
0774デフォルトの名無しさん2012/04/23(月) 22:26:48.66
emacsenってそういうの改造するのがすきなんだと思ってた。
キーワードがあるけど出来ないなら無理なんじゃない?
0775デフォルトの名無しさん2012/05/07(月) 04:47:12.38
●正規表現の使用環境
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
0776デフォルトの名無しさん2012/05/07(月) 23:00:02.41
特定タグの中身だけ対象にしたい奴よくいるけどさー
素直にxpath使えよ捗るぞ
0777デフォルトの名無しさん2012/05/08(火) 01:26:56.70
たぶんXML関連の知識知らないって、そういう人は…
0778デフォルトの名無しさん2012/05/08(火) 02:20:49.67
>>776
domやxpathが使えない環境なんだよ
そりゃ何を使ってもいい環境ならいくらでもやりようはあるさ
単純に範囲抽出→置換を繰り返せばいいだけだからな

なんていうか正規表現単体でifと同じ効果を持たせるパターンとかあるだろ?(正規表現のデザパタみたいな感じ)
そういう未知のパターンを知ってるミラクルな人が来るのを期待してるのだよ
有るのかどうかわからんがね
0779デフォルトの名無しさん2012/05/08(火) 06:29:30.64
使用環境にPCREとしか書かないのが悪い
0780デフォルトの名無しさん2012/05/08(火) 07:33:27.77
pcreは先読み後読み迄しかサポートしてないし特定タグ云々は無理っぽい。
0781デフォルトの名無しさん2012/05/08(火) 12:07:31.06
>>778
データを<tag>, </tag>でsplitして順番に舐めて置換してjoinする。
0782デフォルトの名無しさん2012/05/08(火) 14:38:46.54
>>781
<div>abc<div>abc<div>abc</div>abc</div>abc</div>
0783デフォルトの名無しさん2012/05/08(火) 15:53:33.59
検出結果に正規表現で置換掛けろ
0784デフォルトの名無しさん2012/05/08(火) 16:09:37.85
>>778
http://swatmac.info/?p=716
> \( ( [^()]++ | (?R) )* \)

頑張ってこれを改良する方向で。
0785片山博文MZボット ◆0lBZNi.Q7evd 2012/05/08(火) 16:16:35.38
int depth = 0;
文字列を先頭から順番にスキャンする。
"<tag>"が見つかったらdepth++;する。
"</tag>"が見つかったらdepth--;する。
depth != 0のときに"abc"が見つかったらABCに変換する。
0786デフォルトの名無しさん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";
これではだめでした
0787デフォルトの名無しさん2012/05/08(火) 22:42:32.47
>>786
(\r{30})[\s\S]* を $1 に置換すればいい
0788デフォルトの名無しさん2012/05/08(火) 22:42:34.49
その$1にどういう不満があるの?
0789デフォルトの名無しさん2012/05/08(火) 22:56:59.32
ためしてないけどこんな感じかな

(([^\r]*\r){30}).*
\1

\rは連続して30回じゃないよね?
あとperlでやるなら無理に正規表現使わなくてもいい気がする
0790デフォルトの名無しさん2012/05/09(水) 18:50:17.16
>>789
perlの正規表現あんま得意じゃないけど、
30回以下の場合もあるんじゃねとふと思った。
まぁ >>786 に試してもらえばいい話だけど。
0791デフォルトの名無しさん2012/05/09(水) 20:00:54.69
>>789
それは>>786の3を30にしただけじゃダメなのかい。
それにしても例として3に減らしていただけだと思うが。
0792デフォルトの名無しさん2012/05/09(水) 20:06:48.25
ABCが登場したらその後に登場する全てのDEFをXYZへ置換するにはどうしたらいいのん?

xkdmeABCidkDEFledxaoDEFasdDEF
↓
xkdmeABCidkXYZledxaoXYZasdXYZ
07937922012/05/09(水) 20:12:56.44
色々やってたら解決しました
0794デフォルトの名無しさん2012/05/09(水) 20:24:04.29
そのいろいろやった結果を書かんかい('A`)
0795デフォルトの名無しさん2012/05/09(水) 21:12:39.59
はっきりしない質問で申し訳ないのですが、どうも正規表現を書くのが苦手らしく
いつも苦労します。emacs-lispでは、M-x himark-regexp でマッチする所が
ハイライトするかどうかで、うまくいってるか確認しながら書くと言う方法に
気がついてから比較的楽になったのですが、この前perlですごく苦労しました。

perlで正規表現書く時、途中まで書いてここまでうまく行ってるとか
楽に確認できる方法ってなんか使ってますか?
0796デフォルトの名無しさん2012/05/09(水) 23:44:03.96
>>794
処理を分けたか、肯定戻り読みだと思う

>>795
いったん別のところで作ればどうだろ
0797デフォルトの名無しさん2012/05/09(水) 23:58:25.64
>>796
()でくくって$1 とかでprintしながら確かめろって感じですかね、やっぱり。
今度からそうします。
0798デフォルトの名無しさん2012/05/10(木) 00:04:23.32
それをすすめていろいろ工夫するのが、いろんな意味で学ぶことは多そうだけどね。
手っ取り早く確かめたいならこういうのとか。
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
他にもいろいろあるけど、ものは使いよう。
0799デフォルトの名無しさん2012/05/10(木) 00:06:36.91
老婆心ながら言っておくと、Webサービスを使うときはなにが送信されるかをちゃんと理解してね。
0800デフォルトの名無しさん2012/05/10(木) 00:07:36.73
ここまでもuso800
0801デフォルトの名無しさん2012/05/10(木) 01:59:46.06
>>792
これ、正規表現で出来なくね?
出来た人がいたら解法plz!
0802デフォルトの名無しさん2012/05/10(木) 12:46:39.75
>>801
for文とか使ってマッチしなくなるまで置換してるんじゃね?
0803デフォルトの名無しさん2012/05/10(木) 16:39:53.59
unit testで機械的に確認
0804デフォルトの名無しさん2012/05/10(木) 21:56:00.80
>>792
(?<=ABC.*?)DEF
だろwwwwとか思ってやってみたら駄目だった件
0805デフォルトの名無しさん2012/05/11(金) 10:23:43.36
?<=で可変長対応かつ、最短でも最長でもない、すべてのマッチ長さでマッチしないと出来ないね。
0806デフォルトの名無しさん2012/05/11(金) 12:26:10.29
bregonig.dllが使える正規表現チェッカーみたいなものってないのかな?
もしくはperl5.10対応のチェッカー

オンラインのサービスだとレスポンスが遅かったりグループ化の中身を表示してくれなかったりと今ひとつなんだよね…
0807デフォルトの名無しさん2012/05/13(日) 23:21:11.61
自作という発想は
0808デフォルトの名無しさん2012/05/13(日) 23:57:14.24
正規表現チェッカーみたいなものって?
0809デフォルトの名無しさん2012/05/14(月) 02:20:41.79
バリデータじゃね?
0810デフォルトの名無しさん2012/05/14(月) 04:01:52.00
正規表現チェッカーでぐぐって出てくるものみたいなものじゃね?
0811デフォルトの名無しさん2012/05/14(月) 10:17:43.13
>>806
サクラエディタのようなエディタ系しかないな
でもどれもマッチグループの中身を知る事は出来ない
0812デフォルトの名無しさん2012/05/14(月) 16:59:02.74
正規表現チェッカーってのは
前スレで出てた

JavaScript
http://regexpal.com/

Ruby
http://www.rubular.com/

.NET
http://regex-recipe.frozenlib.net/

PHP
http://www.rider-n.sakura.ne.jp/regexp/regexp.php

こういうのを言うんじゃねーの?

前スレでもperl版はないかと聞かれてたが、回答はなかった
0813デフォルトの名無しさん2012/05/14(月) 18:33:49.61
perlは何でないんだろうな
まぁ大抵の物は先読み後戻り迄で事足りるんだけどね
0814デフォルトの名無しさん2012/05/17(木) 23:15:55.05
しばらくずっとプログラミングしてなかったもので、正規表現を忘れてしまったのですが、PHPにて

Japanese system that
<a title=" どうやら〜らしい" style="text-decoration: underline" href="javascript:;">apparently</a>

のような文章で、両<a>タグを除去して(apparentlyは残す)、テキストだけにしたいのですが、どのように書けばいいでしょうか?
08158142012/05/17(木) 23:24:20.18
>>812
のリンクで試してみたのですが、

</?a.*>

では<a>...</a>全てがマッチしました
皆さんは何と呼ぶか分かりませんが、ものぐさな処理方法をしないといけないんだと思いますが、どのようにすればいいのでしょうか?
0816デフォルトの名無しさん2012/05/17(木) 23:27:09.10
もっと完璧で良い方法が有るけどとりあえず提示された解を弄る方向で

</?a.*?>

コレでいける
08178142012/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だけが抜けた形になってしまいました
どこが間違っていますでしょうか?
08188142012/05/17(木) 23:39:15.24
バカでした
デリミタを書いていませんでした
久々だったので忘れていました
すみません
0819デフォルトの名無しさん2012/05/19(土) 06:42:29.09
半角/全角を区別しない検索ってどうすることが多いんだろう。
それらを区別しないオプションが無い環境かつ、あらかじめ文字列を正規化できないような状況という前提で。

[HH][OO][GG][EE] (フォントによっては分かりにくいけど半角と全角の両方を記述)ってやってるけど
何とかならないもんだろうか。
0820デフォルトの名無しさん2012/05/19(土) 06:47:55.19
大星由良助実は大石内蔵助とか。
0821デフォルトの名無しさん2012/05/19(土) 11:19:50.88
>>819
それでいいよ
0822デフォルトの名無しさん2012/05/19(土) 11:51:15.08
>>821
ですよねー(´・ω・`)
HOGEという文字列から[HH][OO][GG][EE]を生成するような仕組みを作らないとダメか……。
0823デフォルトの名無しさん2012/05/19(土) 11:59:38.76
それ作れるのに、あらかじめ文字列を正規化とかは出来ないの?
0824デフォルトの名無しさん2012/05/19(土) 13:07:54.74
>>823
ざっくり言うと、マッチ時は全角半角を区別してほしくないけど、
そのマッチ箇所の文字列は、後で全角半角そのままの状態で使うよ、って感じ。
0825デフォルトの名無しさん2012/05/19(土) 13:12:23.30
NFKCかけるだけだな
0826デフォルトの名無しさん2012/05/19(土) 16:12:14.44
>>824
ああ、なるほど、そういう場合は確かにありそうだね。
理解した、ありがと。
0827デフォルトの名無しさん2012/05/20(日) 12:21:17.36
正規化した文字列を作ってマッチして位置を求めてから元の文字列から
取り出すって手もあるね。性能が要求されるところでなければ書くのが
楽な方でいくのもあり。
0828デフォルトの名無しさん2012/05/21(月) 18:41:01.43
>>827
ああ、なるほど。
プログラムで関数化するなどの場合は、そっちの方が使いやすいかもしれない
0829デフォルトの名無しさん2012/05/21(月) 18:44:36.68
C++のメソッド名にマッチする表現を教えてください。
0830デフォルトの名無しさん2012/05/21(月) 19:04:44.50
アホか
0831デフォルトの名無しさん2012/05/21(月) 20:44:01.80
\D\w* とかでいける?
0832デフォルトの名無しさん2012/05/21(月) 21:53:35.03
>>831
C++を勉強したほうがいいぞ
08338312012/05/21(月) 22:52:32.93
>>832
C++も正規表現も勉強中なのは認めるが、正解を教えてくれ

>>829
というわけで>831は初心者の戯言なのでスルーで
0834デフォルトの名無しさん2012/05/21(月) 23:47:24.14
/C\+\+のメソッド名/
0835デフォルトの名無しさん2012/05/21(月) 23:53:38.23
\w+でよくね?
0836デフォルトの名無しさん2012/05/22(火) 00:21:41.76
お願いします

●正規表現の使用環境
VC# 2010exp

●検索か置換か?
検索

●説明
string内にハングル文字が含まれるかどうかチェックしたいです
0837デフォルトの名無しさん2012/05/22(火) 00:23:49.56
[\x{1100}-\x{11f9}\x{3131}-\x{318e}\x{ac00}-\x{d7a3}]
08388362012/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 進数の数字が正しくありません。」とエラーになってしまいます。
0839デフォルトの名無しさん2012/05/22(火) 01:20:11.59
↑
なんだこれ?

新手のスクリプトか?
0840デフォルトの名無しさん2012/05/22(火) 08:39:43.28
{}いらね
0841デフォルトの名無しさん2012/05/22(火) 20:37:55.05
未だに、(?=)という先読みの意味がわかりません。

何を何より先に読むのでしょうか?
0842デフォルトの名無しさん2012/05/22(火) 22:18:55.79
評価するよりも先に先を読む
0843デフォルトの名無しさん2012/05/22(火) 22:32:11.34
何が、何を評価するよりも、先に読むのですか?
0844デフォルトの名無しさん2012/05/22(火) 23:06:03.84
正規表現エンジンが文字列を評価する前に読む
先読みしても「評価する位置(一般的になんて表現するんだ?)」は移動しない
0845デフォルトの名無しさん2012/05/23(水) 00:07:47.97
先読みはlook-aheadの翻訳です。
マッチ位置を変更せずに、
文字列のマッチ適合最後部より後ろの方に指定したパターンがあるか調べるのです。

foo(?=bar)bazはfoobazbarにはマッチしますが、
foobazにもfoobarbazにもマッチしません。
foobazでは後方にbarがないし、
forbarbazでは動かないはずのマッチ位置が適合しません。
barfoobazでもダメです。
0846デフォルトの名無しさん2012/05/23(水) 00:13:19.93
ご丁寧な解説ありがとうございます。

foo(?=bar)baz

はどのような文字列にマッチするのでしょうか?
0847デフォルトの名無しさん2012/05/23(水) 00:13:29.79
foobaz(?=bar)
と書かないのは嫌がらせのため?
0848デフォルトの名無しさん2012/05/23(水) 00:37:09.84
>>845
> foo(?=bar)bazはfoobazbarにはマッチしますが、
間違ってる。foo(?=bar)bazはいかなるものにもマッチしない。
0849デフォルトの名無しさん2012/05/23(水) 00:39:19.10
>>846
どのような文字列にもマッチしません。
回答スルーして適当な質問を繰り返さないでください。
0850デフォルトの名無しさん2012/05/23(水) 00:41:44.40
これで>>849=>>845だと衝撃だね
0851デフォルトの名無しさん2012/05/23(水) 00:42:56.03
いや、たぶんそうでしょ
原理がわかってないから誰なのかがすぐにわかる
0852デフォルトの名無しさん2012/05/23(水) 00:45:54.24
>foo(?=bar)bazはfoobazbarにはマッチしますが、
適当過ぎてワロタw
てか俺の知らないところで仕様が変わったのかと思ってさっきたしかめたわw
0853デフォルトの名無しさん2012/05/23(水) 00:51:51.43
生兵法は怪我の元w
0854デフォルトの名無しさん2012/05/23(水) 01:14:11.33
生焼けの貝は腹痛の元
0855デフォルトの名無しさん2012/05/23(水) 06:41:23.38
否定先読みの方はこんな使い方まで出来ちゃうんだぜ?
(?!^2chmate$)^2ch$
0856デフォルトの名無しさん2012/05/23(水) 07:16:10.44
>>855
間違ってねーか?
0857デフォルトの名無しさん2012/05/23(水) 12:22:47.94
プログラムから使う場合だと、それこそifを1つ増やすだけで出来ちゃうことも多いから
あんまり使う機会がないんだよなあ。
0858デフォルトの名無しさん2012/05/23(水) 12:39:52.88
>>855
間違ってね?
0859デフォルトの名無しさん2012/05/24(木) 00:07:54.69
別に間違ってるようには見えないが。

% echo "2ch\n2chmate\n2ch\n2chmate" | grep -Pn '(?!^2chmate$)^2ch$'
1:2ch
3:2ch
0860デフォルトの名無しさん2012/05/24(木) 00:27:45.52
↑
windowsのクセにw
0861デフォルトの名無しさん2012/05/24(木) 00:45:09.51
>>859
(?!^2chmate$)^2ch$ と ^2ch$ でマッチするものは変わらないので先読みの例として不適切。
0862デフォルトの名無しさん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>"
0863デフォルトの名無しさん2012/05/27(日) 17:05:41.71
>>862
考え方は、先読みを3回やってポインタを動かさずにキャプチャー、後は読み飛ばし。
エスケープ無し、name{0,1,2}が文字列(属性値)内に出現しない、
属性値は2重引用符のみを使用、=の前後に空白なし、で書けば、

<en_Image(?=.*name0="(.*?)")(?=.*name1="(.*?)")(?=.*name2="(.*?)").*?</en_Image>
0864デフォルトの名無しさん2012/05/27(日) 17:34:47.11
>>863
先読みの括弧内でさらぬキャプチャの括弧が使えるとは知らなかった
862じゃないけど勉強になったthx
0865デフォルトの名無しさん2012/05/27(日) 18:51:50.39
コレ>>863
また俺の知らないうちに仕様が変わったのかと思ってやってみたらやっぱり出来ねぇじゃねぇかw
毎回間違ってる奴は誰だよw
0866デフォルトの名無しさん2012/05/27(日) 19:14:05.96
>>863も>>865も環境書いてほしいな
0867デフォルトの名無しさん2012/05/27(日) 22:12:42.49
他は知らないけど、PCREなら可能だね

ttp://ideone.com/Smpnr
0868デフォルトの名無しさん2012/05/27(日) 22:24:55.97
蛇足だが。

#!/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;
0869デフォルトの名無しさん2012/05/27(日) 22:28:34.86
.NETでもできるね

ttp://regex-recipe.frozenlib.net/recipe/105
0870デフォルトの名無しさん2012/05/27(日) 22:49:39.65
どうでもいいけど
<en_Image><foo name2="ご飯" name1="カツ丼" name0="image.png"></foo></en_Image>
なんかにも引っかかるようにしてるのはわざとなのか?
0871デフォルトの名無しさん2012/05/27(日) 23:19:27.14
>>870
そこまでの厳密さが必要なのかねえ?直すとしたら↓か?
[^<]*?</en_Image>
0872デフォルトの名無しさん2012/05/29(火) 03:07:00.30
結局できないと言ってる >>865 の環境は何だったのだろうか
0873デフォルトの名無しさん2012/05/29(火) 04:57:16.56
>>865の知らないうちに変わったのって何年も前なんだろうな…
0874デフォルトの名無しさん2012/05/29(火) 06:11:54.07
>>870
他にもtestname2="hoge"とかfoobarname1="orz"とかにもヒットするぜい
0875デフォルトの名無しさん2012/05/31(木) 15:27:37.03
なんでこのレベルの奴がこの板にいんだよ年々レベル下がってるじゃねーか死ね
0876デフォルトの名無しさん2012/05/31(木) 18:02:06.15
食物連鎖の上の人は他のところに行ったよたぶん
0877デフォルトの名無しさん2012/05/31(木) 20:52:32.33
>>875
あれ?と思って板名みたらプログラムであって上級プログラムでもスーパープログラマーでもなかったけど
何を期待してるの?
0878デフォルトの名無しさん2012/05/31(木) 21:42:38.25
>>875
お前がレベルを上げてくれれば済む話だな
0879デフォルトの名無しさん2012/05/31(木) 22:17:24.21
コピペとわかっていてもみんな反応したくなる

ある意味レベル高いな
0880デフォルトの名無しさん2012/06/02(土) 02:21:40.60
どうもうまく動かねぇと延々悩んでたら、単に「?」が対応してなかったっていう…
0881デフォルトの名無しさん2012/06/02(土) 14:52:01.54
毎回間違ってる奴は>865だったっていう…
0882デフォルトの名無しさん2012/06/03(日) 00:24:51.38
すみませんが、お力をお貸しいただけないでしょうか?
例えば、
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."のような形をとりますので"の直前のピリオドでは改行し、最後の."の"で改行する

のように複雑になってしまいます
どのような正規表現を書けば宜しいのでしょうか?
また、上記を満たすようなコードの書かれているサイトなどあれば紹介していただきたいと思います
宜しくお願い致します
0883デフォルトの名無しさん2012/06/03(日) 00:34:36.27
改行されてるやん
0884デフォルトの名無しさん2012/06/03(日) 00:51:10.54
>>882 じゃないけど…

> 改行されずに全部1文で取得されてきたとします
0885デフォルトの名無しさん2012/06/03(日) 00:53:07.56
改行込みで取り込見直すようにする方向で努力したほうがいいんでないか
0886デフォルトの名無しさん2012/06/03(日) 01:39:20.91
>>885
なるほど、確かにそっちの方が楽そうですね

スレ違いだとは思うのですが、
例えばこのページ
http://cgi2.nhk.or.jp/e-news/news/index.cgi?ymd=20120601
の英文だけを取得するにはDOMDocumentで
xPathは//div[@id=\"tab_1\"](/text()を後ろに付けても同じようです)としたのですが、
どのように指定すれば改行込みで取り込めるのでしょうか?
上記のやり方だと改行されずに取れてしまいます

0887デフォルトの名無しさん2012/06/03(日) 05:27:17.10
それブラウザ依存じゃね?
0888デフォルトの名無しさん2012/06/03(日) 06:40:40.77
>>886
<br />
ちゃんと入ってるやん
0889デフォルトの名無しさん2012/06/03(日) 07:54:46.63
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.
0890デフォルトの名無しさん2012/06/03(日) 11:48:23.96
>>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";
?>
0891デフォルトの名無しさん2012/06/03(日) 13:55:10.06
どうもプログラマ以外の奴がスレに入り込んでいるようだな。
妨害要員でも呼んできたか?w
0892デフォルトの名無しさん2012/06/03(日) 14:10:01.68
>>891
> どうもプログラマ以外の奴

自己紹介乙
0893デフォルトの名無しさん2012/06/03(日) 14:35:44.26
まあPGじゃなきゃ参加できないわけでもないしな。
0894デフォルトの名無しさん2012/06/03(日) 14:48:50.39
ここはム板ですから何もおかしくありません
0895デフォルトの名無しさん2012/06/03(日) 20:16:31.83
プログラムが参加してきたのだな
0896デフォルトの名無しさん2012/06/08(金) 17:03:45.85
すみません
Objective-CのNSRegularExpressionで、ある文字列について、
・順番通りに
・一部が欠けてもよく
・途中に余計な文字が入ってもよく
・一致する数を数える
ようなパターンを組みたいのですが、
例えばABCDEという文字列があったとして
ABCDE→5(全件一致)
AABBCCDDEE→5(全件一致)
ADCBE→3(A,C,Eが一致)
AFGHBCDE→5(全件一致)
EDCBA→1(Eのみ一致)
というように数えたいのですが、上手くいきません。
.*?(A)?.*?(B)?.*?(C)?.*?(D)?.*?(E)?.*?
ではダメみたいなのですがどうするのが正しいでしょうか
0897デフォルトの名無しさん2012/06/08(金) 17:10:29.99
間違えました
Dが先に一致して以降BCは一致しないので
ADCBE→3(A、D、Eが一致)
です。
0898デフォルトの名無しさん2012/06/08(金) 18:52:44.41
それ、正規表現の仕事じゃないやんw
0899デフォルトの名無しさん2012/06/08(金) 18:57:38.92
正規表現でやるには複雑すぎるね
素直にプログラムで書いたほうが早いよ
0900デフォルトの名無しさん2012/06/08(金) 19:33:20.07
こんな感じかな?
^[^ABCDE]*(A)?[^BCDE]*(B)?[^CDE]*(C)?[^DE]*(D)?[^E]*(E)?.*$
0901デフォルトの名無しさん2012/06/08(金) 20:11:47.73
それがほんとにマッチするかわからんけど
マッチしたとしても1行丸ごとやっちゃうから件数が取れないな
0902デフォルトの名無しさん2012/06/08(金) 20:12:43.61
ありがとうございます。
>>900を見て気づいたのですが、これだと最初に最初の文字と最後の文字が来てしまった時点で終わってしまうんですね。
で、@"^[^A]*(A)?[^B]*(B)?[^C]*(C)?[^D]*(D)?[^E]*(E)?.*$"などとしてみると、途中の文字が欠けると以降マッチされない。
例えばAEBCDEとかだったら、AとEマッチで2ではなくて、2文字目のEを無視して全件マッチで5としたい。
最も多くマッチするマッチングを探そうとすると、やっぱりプログラミングしないとダメっぽいですね・・・。
0903デフォルトの名無しさん2012/06/08(金) 20:30:50.96
?
0904デフォルトの名無しさん2012/06/09(土) 12:59:29.64
>>901
マッチしますよー。 http://rubular.com/r/50zMFg5OOy
一致した件数(と、その内訳)は$1〜$5の内容を見る。これは質問者の考えたアイデア。
>>902
>最初に最初の文字と最後の文字が来てしまった時点で終わってしまう
これだとって… AEBCD→(A、Eが一致) こういう仕様だったんだから(笑)
何をするにもまず仕様を確定させないといけないね。
0905デフォルトの名無しさん2012/06/09(土) 17:13:39.26
>>904
> AEBCD→(A、Eが一致) こういう仕様だった
それどこから持ってきたの?
0906デフォルトの名無しさん2012/06/09(土) 18:59:38.75
>>905
>>896と>>897からですけど、何か引っかかる点があるの?
0907デフォルトの名無しさん2012/06/09(土) 19:41:13.67
>>906
どちらにもないみたいだけど…
0908デフォルトの名無しさん2012/06/09(土) 19:56:46.83
えーと、論点をハッキリさせてくれないと困るな。
AEBCD→(A、Eが一致)
>>896と>>897を見て、これ以外の解釈があるってことかな。
そうならば、具体的にそれを示してくれないと。
0909デフォルトの名無しさん2012/06/09(土) 20:26:20.59
「最長でマッチしてくれ」っていってるんじゃない?
AEBCD->ABCD
0910デフォルトの名無しさん2012/06/09(土) 20:32:28.31
>>908
その事例は書いてないし、>896の下記事例と矛盾する。
> AFGHBCDE→5(全件一致)
まあ、要件をちゃんと言葉で説明出来てない質問者も悪いと思うけどね。
0911デフォルトの名無しさん2012/06/09(土) 20:56:57.62
な、なんか狐につつまれたような気がする…。(AA略
0912デフォルトの名無しさん2012/06/09(土) 21:15:24.74
>>909
>>896と>>897に「最長でマッチしてくれ」という内容は無いです。
最長でマッチさせたいという要求は>>902で初めて出たものですね。

ただし、最大限好意的に解釈すれば「最長となるパターンが欲しい」とも読み取れます。
細かく書かないと難しい。
せっかくだから書きますね。

>>910
いや、そこは矛盾してないですよ。
例題の対象はABCDEだけなので、FGHは「余計な文字」となります。
0913デフォルトの名無しさん2012/06/09(土) 21:50:33.66
書いてみました。

>>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が一致)
となります。
0914デフォルトの名無しさん2012/06/09(土) 21:52:44.95
<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>の結果がハッキリと異なれば、ルールを確定できましたね。
0915デフォルトの名無しさん2012/06/09(土) 22:22:12.91
そう、もともと最長一致にすべきかどうか判断できる例が載っていなかったんだ。
だから勝手にAEBCD→(A、Eが一致)なんて決めてはいけないんだよ
0916デフォルトの名無しさん2012/06/09(土) 22:25:17.78
DACB
このときどうするかがわかればそれでよくね。
0917デフォルトの名無しさん2012/06/09(土) 22:29:39.31
元の例から、AEBCDのとき、ABCDをとってはいけなくなる根拠を出さないとな。

ABCDととればいいはずなのに、気を利かせてAEにするのは無理がある、とも言い換えられる状態。
0918デフォルトの名無しさん2012/06/09(土) 22:32:09.03
>>912-914
例題不足と最短一致と確定することに矛盾はないの?
0919デフォルトの名無しさん2012/06/09(土) 23:40:50.88
>>915>>917
なるほど、それならその通りですね。
例題だけで判断すれば、どちらともつかないから決めつけられない。

質問者が当初<A>をルールとしていたはず、という根拠の最後の私の判断基準は、
重要なキーワードである「最長」という言葉がなかったということです。
それを普通に考えると、<C>よりは<A>に分がありますよね。
突き詰めると、私の判断(確信)は質問者のマインドも汲み取ろうとした結果のようです。

あとまあ隠れた要因として、
・質問者のアイデアの延長線で出来る
・正規表現で可能な範囲である
のは<A>だけ?ということもありますけどね。

>>916
一応ABCDE5文字が対象なので…。
>>918
ん?勘違いなさってる。
最短一致じゃないですし、>>912-914は、細かく言えば確定できていない、ということを示しました。
0920デフォルトの名無しさん2012/06/10(日) 16:43:55.84
> それを普通に考えると、<C>よりは<A>に分がありますよね。
これを受け入れたとして、
> AEBCD→(A、Eが一致) こういう仕様だったんだから(笑)
こうまで言い切れる理由にはならんだろ
0921デフォルトの名無しさん2012/06/12(火) 19:47:27.69
●正規表現の使用環境
鬼車

●検索か置換か?
検索

●対象データ
あああかか
うううきき
いいいくく

●希望する結果(あああ いいい うううをマッチさせる & きき くく の文字を含まない)
あああ
(あああ の部分のみマッチ)

●説明
複数の文字(文字列1)をマッチさせたい、そして
その文字列中で、指定した文字が入ってたとき、その文字(文字列1)はマッチしないということは可能でしょうか。

[例文]
あああかか
うううきき
いいいくく

>>922に続く
0922デフォルトの名無しさん2012/06/12(火) 19:47:53.28
>>921の続き

↓構文はnot使ったりと正規表現と関係無くて申し訳ないですが自分のイメージ的にはこんな感じです。
( (あああ|いいい|ううう) (not (きき|くく)) )

この場合、「あああかか(正確には あああ の部分のみ)」がマッチとなり、
文字列中に「きき、くく」が文字列に含まれる
「うううきき(正確には ううう の部分)」と「いいいくく(正確には いいい の部分)」はマッチさせない感じです。

調べた感じですと、否定文を使う形になるとは思いますが、否定文が結構複雑そうで、
それに複数の否定を加えるようだとかなり難しいように感じますが、実際にこのような正規表現を実現出来るか不安なのですが、実現可能でしょうか。
また、もし上記を満たす正規表現が分かる方おりましたら教えて頂ければ幸いです。
どうぞよろしくお願い致します。
0923デフォルトの名無しさん2012/06/12(火) 21:09:05.98
>>921-922
(あああ|いいい|ううう)(?!きき|くく)+?$
0924デフォルトの名無しさん2012/06/12(火) 22:44:31.65
>>923
ありがとうございます。
自分の環境だと、うまく動かず+?$を外して
(あああ|いいい|ううう)(?!きき|くく)でうまく動きました。
後述で補足となりますが、大変申し訳ありません・・・言葉足らず、条件抜けとなってしまいました。。

大変申し訳ありませんが、例文ですが、

あああ○○○○○かか○○○○○○
かか○○○○○○あああ○○○○○
いいい○○○くく○○○
うううきき
ききううう
ううう○○○○○きき○○○○○○
きき○○○○○○ううう○○○○○


上記のように否定の単語の「きき」&「くく」が「ううう」「いいい」の直後に来るわけではなく
前後や間を挟んで出てくる場合もありました。。

上記の例文で、下記のような文を打つと、
( (あああ|いいい|ううう) (not (きき|くく)) ) ←これはイメージで正規表現文じゃないです。
(あああ|いいい|ううう)(?!きき|くく)+?$


あああ○○○○○かか○○○○○○
かか○○○○○○あああ○○○○○

上記のあああの部分だけマッチさせたいのですが、これは可能でしょうか。
もしお分かりの方おりましたら再度となってしまい申し訳ありませんが教えて頂けないでしょうか。
後出し条件と言葉抜けとなってしまい大変申し訳ございませんでした。
0925デフォルトの名無しさん2012/06/13(水) 00:24:06.44
>>924
ごめんそんな気はしてたけど考えるの面倒だった。
これでどうかな。
^(?!.*(きき|くく))(?=.*(あああ|いいい|ううう)).*$
0926デフォルトの名無しさん2012/06/13(水) 00:32:40.79
>>925
おおお、うまく動作致しました!感動で鳥肌です。。
説明不足で申し訳ありませんでした、再度お答え下さってありがとうございます!
本当にありがとうございます!
正規表現使う場面も多いので勉強してきます。
0927デフォルトの名無しさん2012/06/15(金) 13:01:14.62
変換のtrを使わず置換で

abc -> ABC
Abc -> ABC
aBc -> ABC

こんな感じにできないのかな

s/[a-z]/\U$&/g
としてもダメだった…
0928デフォルトの名無しさん2012/06/15(金) 13:10:40.09
sed -e 'y/abchigedjfklmnopqrstuvwxyz/ABCHIGEDJFKLMNOPQRSTUVWXYZ/'
0929デフォルトの名無しさん2012/06/15(金) 13:18:46.06
s/[a-z]/\u$&/g; 
おしかったね
0930デフォルトの名無しさん2012/06/18(月) 13:13:11.82
((角|丸)ゴシック|明朝)

こういった入れ子?を書くと例えば丸ゴシックにマッチしますが丸にもマッチします
どのように書けばよいのでしょう

(i(Phone|Pad|OS)|Android)

こういうのも同様ですね
0931デフォルトの名無しさん2012/06/18(月) 13:22:26.75
丸)のところをエスケープしてみれば?
0932デフォルトの名無しさん2012/06/18(月) 13:28:15.85
>>930
((?:角|丸)ゴシック|明朝)
こういうこと?
0933デフォルトの名無しさん2012/06/18(月) 13:44:22.97
>>930
「丸」にマッチする? 環境は?
egrepではマッチしないんだが。
0934デフォルトの名無しさん2012/06/18(月) 13:47:56.70
((角|丸)(ゴシック|明朝))
0935デフォルトの名無しさん2012/06/18(月) 13:53:22.06
>>934
それでは「丸明朝」にマッチすると思うが。
0936デフォルトの名無しさん2012/06/18(月) 14:01:16.97
角ゴシック|丸ゴシック|明朝 なんだから
((角|丸)ゴシック)|明朝
0937デフォルトの名無しさん2012/06/18(月) 14:20:10.56
え?
0938デフォルトの名無しさん2012/06/18(月) 14:52:52.24
どんどん酷くなってる件w
0939デフォルトの名無しさん2012/06/18(月) 15:41:47.11
>>930
> 丸にもマッチします

$ printf 'A\nB\nC\nD\n' | egrep '((A|B)C|D)'
D
0940デフォルトの名無しさん2012/06/18(月) 16:35:20.34
本題と関係ないけど、egrepではなく、grep -eを使った方が好き。
0941デフォルトの名無しさん2012/06/18(月) 16:46:31.29
誰が質問者で条件がどーなのかさっぱりw
質問かどうかもあやしい
0942デフォルトの名無しさん2012/06/18(月) 19:11:40.07
「角ゴシック、丸ゴシック、明朝」にマッチして
「角、丸」にマッチしなければいいんだろ

だったら
([丸角]ゴシック|明朝)
でいいんじゃね?
0943デフォルトの名無しさん2012/06/18(月) 19:41:14.84
マルチバイト文字に対応してればそれでいいかもね
0944デフォルトの名無しさん2012/06/18(月) 20:00:36.46
>>942
ちゃんと嫁って、もう一例書いてあるだろ
(i(Phone|Pad|OS)|Android)
0945デフォルトの名無しさん2012/06/18(月) 20:20:02.76
(iPhoge|Android)
0946デフォルトの名無しさん2012/06/18(月) 20:44:29.06
>>944
よく読んでも、そっちについてはどういう不都合があるのか書いてないように見えるけど?
0947デフォルトの名無しさん2012/06/18(月) 21:09:59.13
((角|丸)ゴシック|明朝)の場合は942が書いてるように[]で括ればいいと思う
何故なら文字が単独だから、んで下の例では[]は使えない
故に(iPhone|iPad|iOS)|Android)を(i(Phone|Pad|OS)|Android) こうすれば効率的と判断したからでは?
0948デフォルトの名無しさん2012/06/18(月) 21:49:34.97
iPodに対応してないぞ
0949デフォルトの名無しさん2012/06/19(火) 09:08:19.93
(i(Phone|P[ao]d|OS)|Android)
0950デフォルトの名無しさん2012/06/19(火) 11:11:50.61
角明朝
丸明朝

の「明朝」にマッチしていいのか悪いのか?
それ以前に>>930の「丸にもマッチします」とは何なのか?
0951デフォルトの名無しさん2012/06/19(火) 20:02:49.25
久々に言っとくか

質問者はテンプレ(>>5)使え
0952その�@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">
0953その�A2012/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>


※メッセージが長すぎます、と怒られちゃうので分割して投稿しています。
0954その�B2012/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;

}

というコードを実行すると …続く
0955その�C2012/06/20(水) 18:37:11.79
↓の部分で正規表現でヒットしちゃいます。
foreach ループの中で

1回目(欲しい部分)
2回目(不要な↓のデータ)    ・・・  (A)

とループ処理の中で流れれば良いのですが、 m2.Groups["url"].Value; ループは1回のみ通り
(A) が取得されてしまい困ってます。私の正規表現はどこかおかしいでしょうか?

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
0956デフォルトの名無しさん2012/06/20(水) 18:37:29.01
ちょwww
0957デフォルトの名無しさん2012/06/20(水) 18:50:38.34
もうちょっと整理しろよ
長々と書くならコピペだけで動くコードにして、コード貼るサイトに書いてくれ。
0958デフォルトの名無しさん2012/06/20(水) 18:55:32.97
結局、
null,event)" href="[URL]"><em>
の[URL]部分だけ取り出したいのに、うまくいかないということか?
0959デフォルトの名無しさん2012/06/20(水) 19:00:23.64
ざっと見た感じ
(?<url>[A-Za-z0-9_\.\/].*?)
の後ろのピリオドが邪魔じゃね?
パラメータいらないなら、:だけ追加して
(?<url>[A-Za-z0-9_\.\/:]*?)
こうとか?
0960デフォルトの名無しさん2012/06/20(水) 19:39:37.57
>>957
コードを貼って見せられるサイトとかあればいんですけどね。
自前のサーバにアップしかないか。

>>958
はい、同じ様なURLが複数HTML存在しており、
URL部分だけを抽出したいのに余計なところが
抽出されてしまっています。
つまり。 >>952 >>953 のうち抽出したいURLは、http://www.jpa.or.jp/chishiki/index.html だけなんです。
しかし、現状の正規表現では >>955 の下段に記載した余計なHTMLが抽出されてしまっています。

>>959
やってみますです。
0961デフォルトの名無しさん2012/06/20(水) 19:53:51.26
>>960
http://pastebin.com/

どこまでマッチさせたいのかよく分からないけど、
href="〜" ならば、意味合い的にコアの部分は href=""(?<url>[^""]*)""
とかで十分では。
0962デフォルトの名無しさん2012/06/20(水) 20:10:12.39
>>960
コード貼るサイトあるんだよ。
質問スレのテンプレ探してみ。
0963デフォルトの名無しさん2012/06/20(水) 20:11:25.52
>>961
ありがとうございます。 "" を含まないという意味ですよね。
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)""><em>.*");
でやってみたところそれらしいそれらしい値は取れる様になりました。

ただ、ごにょごにょしたHTMLが10件ほどあって
そのうちの7つはしっかり抽出出来るのですが
それ以外が未だうまくいかないのでもうちょっと頑張ってみます。

09649632012/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>
0965デフォルトの名無しさん2012/06/20(水) 21:10:19.55
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)"">[^<]*<em>");

マッチさせたい範囲を明確にして欲しいな。特に、後ろの<em>以降もマッチさせる必要あるのかどうか。
こんなのでも確定出来るんじゃないの?
System.Text.RegularExpressions.Regex.Matches(wk, @",null,event\)"" href=""(?<url>[^""]*)");

あと、スペース入る可能性あるところ全部に\s*を入れるのがセオリー。
0966デフォルトの名無しさん2012/06/20(水) 21:19:32.12
>>965
ありがとうございます。出来ました!!!セオリーもありがとうございます。

[^<]* の解釈としては、

< 以外 の文字列が 0 回以上存在する

で良いでしょうか?
0967デフォルトの名無しさん2012/06/20(水) 21:21:06.17
因みに

http://gimite.net/help/devas-ja/all_regex.html

のサイトよく纏められていておすすめです。
0968デフォルトの名無しさん2012/06/20(水) 21:31:43.10
>>966
そうです。>>961の[^""]*も同様。
マッチを明確にすることが出来るので、常套手段です。
これでうまくいかないときだけ.*?を使います。

くどいようですが、まず最初に「確実に確定できるマッチ範囲」をしっかり決めた方が吉です。
0969デフォルトの名無しさん2012/06/20(水) 21:43:39.52
ありがとうございます。修行します。
0970デフォルトの名無しさん2012/06/20(水) 21:52:46.74
返されるデータを正規表現だけで全て抽出しようと試みてましたが
結構厳しそうです。


あらゆるパターンがあるので。

地道に文字列操作します。
0971デフォルトの名無しさん2012/06/20(水) 22:23:01.21
【6月19日 AFP】大韓航空は18日、ケニアの人々が「原始的エネルギー」で満ちていると広告で表現したことを謝罪し、
ウェブサイトから広告を削除した。

 ソウル・ナイロビ間の便を近日就航する予定の大韓航空は、そのPR広告で「大韓航空で飛び、アフリカの大いなるサバンナ、
サファリツアー、そして原始的エネルギーに満ちた先住民たちを楽しみましょう」と表現した。

 あるケニア人はこうツイートしている。
 「私の #原始的エネルギーを処理するために今日はライオン狩りとゾウいじめをしようと思う」

 別のケニア人はこうツイートした。
 「私は毎朝起床するために #原始的エネルギー を使っています」

 数百件のツイートが集まったことを受け、大韓航空は、「ナイロビ便の最近の広告についてしかるべき確認を行っています。
この状況に対して心から謝罪いたします」と発表した。

以下省略
http://www.afpbb.com/article/economy/2885046/9141540
0972uy2012/06/22(金) 14:33:13.43
進化しないよね、正規表現
機能が足り無すぎ
0973デフォルトの名無しさん2012/06/22(金) 14:39:10.52
(?R) とかあるじゃん。
0974デフォルトの名無しさん2012/06/22(金) 15:05:56.77
>>972
^
$
(|)
[]
n
\

これで十分です
0975uy2012/06/22(金) 17:29:25.46
そう思うなら君はそこで永久に成長止まれば良いわけで

正規表現って何年前に作られたもので何年間ろくに成長せずに止まってるんだよっていう
正規表現内にシンタックスシュガー入れないからいつまでたっても正規表現は見にくい
人間が書ける範囲を狭める
0976デフォルトの名無しさん2012/06/22(金) 17:50:07.85
>>975
そう思うなら君が新たなる次世代型正規表現とやらを作ったらいかがかね?
0977デフォルトの名無しさん2012/06/22(金) 17:50:32.52
>>972-975
さすがにこれは「お前らがそう思うんなら(ry」としか言いようがない
こちとらPerlとかRubyの最新版のマニュアル見てたら
\gだの\kだの\pだの今まで知らなかった拡張記法があって脳汁が溢れそうなんだがw

俺はuyのように全てを知り尽くしたわけじゃないから、
今後もこういった発見で楽しい思いをさせてもらうよ
0978デフォルトの名無しさん2012/06/22(金) 18:28:04.49
>>975
シンタックスシュガーがほしいだけなの?
シンタックスシュガーがあれば人間がかける範囲が広がると思うのはちょっとどうかと
0979デフォルトの名無しさん2012/06/22(金) 18:28:35.50
正規表現はマスターすれば
バリデーションチェックとか速そうですね。


正規表現を考える時間に
文字列操作でバリデーションを作成した方が早かったりするので悩みますねん。
0980デフォルトの名無しさん2012/06/22(金) 18:31:13.81
時間あるときに考えて、作って、速度比較してみたらいいよ。
たぶん今作ってるほうが速いよ
0981デフォルトの名無しさん2012/06/22(金) 18:46:57.01
使えない人ってなぜか使わなくてよい理由を探して口にださないと済まないみたいだ。
0982デフォルトの名無しさん2012/06/22(金) 19:09:34.29
ちょっと複雑になると途端に見にくくなるとか、プログラム側で分岐させるだけでスッキリする場合とか、
確かにそういうところがあるのは否定出来ない。

そういえば否定もちょっとめんどい。
0983デフォルトの名無しさん2012/06/22(金) 19:10:24.04
>>981
でもある言語の同じレベルのプログラマ達の中で、使える人と使えない人が
くっきり分かれてしまうのは問題だと思いませんか。
0984デフォルトの名無しさん2012/06/22(金) 19:20:32.46
>>980
物にもよるかと思いますが
プログラムでロジックを組んだ方が開発時間が短縮出来る気がしてます。
0985デフォルトの名無しさん2012/06/22(金) 19:47:48.43
確かに誰でも使いやすい道具になるのは正しいこと。
俺だって昔はなんだこりゃと思った時期もあったし、
それを忘れてこんなの出来ないのかよと言うのはただの傲慢かと思う。

でも、そんなに難しくないから理解すると楽できるとこがありますよ。

>>982
否定は誰かが構文作ってくれるに違いない。あれは人がやる仕事じゃない。
0986uy2012/06/22(金) 20:05:54.52
>>978
そこからか?
アセンブラで作れる範囲のプログラムと
C#で作れる範囲のプログラム
理論上は作れるとかいうボケいらないよ?
0987uy2012/06/22(金) 21:59:25.71

str = "12345678"
str.scan(/\d{1,3}/) {|m| p m }
は
"123" "456" "78"
と表示されるけどこれを
"12" "345" "678"
にしたんだけどどうやんの??
0988デフォルトの名無しさん2012/06/22(金) 22:13:33.43
>>984
うん、ものによるのは確かにそうで、ある程度複雑になった場合は、
正規表現のほうが明快かつ速度も優れる場合があると思う。
逆に、ある程度単純な場合は正規表現を使わないほうが速いことが多い。

>>981
使うな厨だといいたいのかな。

>>986
C#がアセンブラのシンタックスシュガーであるという大ボケを見せてくれてるの?
0989uy2012/06/22(金) 22:20:46.61
>C#がアセンブラのシンタックスシュガーであるという大ボケを見せてくれてるの?

おい

アセンブラで3Dゲー作れ
0990デフォルトの名無しさん2012/06/22(金) 22:26:35.29
>>989
その前に答えてよ。
C#ってアセンブラのシンタックスシュガーなの?
0991uy2012/06/22(金) 23:21:59.97


>>990


なんだ



ただのバカか




0992デフォルトの名無しさん2012/06/22(金) 23:41:10.23
(?:.*\n{2}).*
の書き込みをする人にイラッ☆
0993デフォルトの名無しさん2012/06/22(金) 23:46:47.51
>>987
reverseしておいてそれやって、reverse
0994デフォルトの名無しさん2012/06/23(土) 00:19:27.72
>>991
恥ずかしくなったの?改行多いよ
0995デフォルトの名無しさん2012/06/23(土) 00:25:43.93
ふつう、言語そのものを、低水準言語のシンタックスシュガーとは言わないような。
0996デフォルトの名無しさん2012/06/23(土) 01:00:58.28
でかい釣り針だな…
とりあえずおまいら全員Perl6の正規表現を読んで失禁してくればいいと思うよ
http://feather.perl6.nl/syn/S05.html
0997デフォルトの名無しさん2012/06/23(土) 01:15:14.82
ラクダ本4版の正規表現の章は100ページ近くあって軽くひきつけを起こした
0998uy ◆pdu1UZmweE 2012/06/23(土) 01:33:43.00
>>994

なんだ


ただの
ゴミか
0999uy ◆pdu1UZmweE 2012/06/23(土) 01:34:46.66
>>994

なんだコイツ

ゴミじゃねーか
1000uy ◆pdu1UZmweE 2012/06/23(土) 01:35:27.46
 
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。