5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

正規表現 Part9

1 :デフォルトの名無しさん:2011/12/11(日) 10:19:30.25
正規表現(Regular Expression)スレです。

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

正規表現 Part8
http://hibari.2ch.net/test/read.cgi/tech/1301067486/

2 :デフォルトの名無しさん:2011/12/11(日) 10:19:38.70


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



3 :デフォルトの名無しさん: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/

4 :デフォルトの名無しさん: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/

5 :デフォルトの名無しさん:2011/12/11(日) 10:20:30.40
スルーされにくい質問のテンプレと例

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

●検索か置換か?
検索

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

●対象データ
ABCA
BCAA
CABA

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

6 :デフォルトの名無しさん:2011/12/11(日) 17:26:51.35
^.*?A

7 :デフォルトの名無しさん:2011/12/11(日) 20:38:47.00
>>6
どうした?

8 :デフォルトの名無しさん:2011/12/11(日) 20:47:52.13
ただの5に対する解答例なんじゃないの

9 :デフォルトの名無しさん:2011/12/11(日) 21:33:05.40
つか

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

これわかりにくいだろ
アンダーラインのつもりだったのかよ

10 :デフォルトの名無しさん:2011/12/11(日) 21:41:11.54
アンダーラインのつもりであることはわかるだろ。

11 :デフォルトの名無しさん:2011/12/11(日) 22:20:26.34
^^;

12 :851:2011/12/11(日) 23:27:56.52
>>939
perlのオプションが2種類あることを知らないで適当書いてしまいました、申し訳ない..

>>998
ご指摘ありがとうございました

13 :デフォルトの名無しさん:2011/12/12(月) 16:43:32.38
preg_match関数
http://jp2.php.net/manual/ja/function.preg-match.php
>flags には以下のフラグを指定できます。
>PREG_OFFSET_CAPTURE
>このフラグを設定した場合、各マッチに対応する文字列のオフセットも返されます。 これにより matches の値は配列となり、 配列の要素 0 はマッチした文字列、 要素 1は対象文字列中におけるマッチした文字列のオフセット値 となることに注意してください。

PHPの話です。
この、PREG_OFFSET_CAPTUREという機能がすごく有り難いのですが、、
この機能は、preg_match関数だけにしかないのでしょうか?
PHPで他にもこの機能を持った関数はあるのでしょうか?
マルチバイトの関数でこの機能があれば有り難いのですが、なんかないですよね?

14 :デフォルトの名無しさん:2011/12/12(月) 19:01:14.89
ググれ

15 :デフォルトの名無しさん:2011/12/14(水) 02:34:01.67
性器表現

16 :デフォルトの名無しさん:2011/12/14(水) 03:36:16.77
>>13
このスレに常駐してる奴にそんなこと分かるわけないだろ。

17 :デフォルトの名無しさん:2011/12/14(水) 11:36:40.54
PHPはmb系列は鬼車なんだね。PCREしか使わないから知らなかった。

18 :デフォルトの名無しさん:2011/12/15(木) 03:38:33.31
>>12
鬼車の再帰の作り方教えて

19 :デフォルトの名無しさん: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

20 :デフォルトの名無しさん:2011/12/15(木) 10:03:14.98
日本語で書かれたサイトはないの?

21 :デフォルトの名無しさん:2011/12/15(木) 10:10:23.05
>>20
>19はどちらも日本語だと思うが。

22 :デフォルトの名無しさん:2011/12/16(金) 05:45:43.65
なるほど、pcreの再帰は使い勝手悪いけど鬼車の再帰は使い易い。確かに鬼車なら簡単に書けますね。
括弧の数を数えるコードを書くほうが効率悪いかも。

23 :デフォルトの名無しさん: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


24 :デフォルトの名無しさん:2011/12/16(金) 10:32:32.30
>>23
\A(?:-1|0|[1-9]\d*)\z

○0
×00
×000

25 :デフォルトの名無しさん:2011/12/16(金) 20:06:59.35
>>23
数値をなぜわざわざ正規表現でチェックするの?

26 :デフォルトの名無しさん:2011/12/16(金) 21:21:23.51
>>25
その方がif文より速い、と思い込んでるんだろうね

27 :デフォルトの名無しさん:2011/12/17(土) 02:17:24.29
あー、そうか、単純にif文で文字列比較すればいいのか…

28 :デフォルトの名無しさん: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")

29 :デフォルトの名無しさん:2011/12/17(土) 03:15:29.42
\sとホワイトスペースとされている[ \n\r\t\v\f]を比べたら違っていた。
\sには\vが含まれてない。
ホワイトスペースは明示的に指定した方が良いな。

30 :29:2011/12/17(土) 03:30:16.80
>>29はPHPの最新版。
実際には\vが出てくる機会は無いんだろうけど。
万が一使われて不具合でる場合に、速度犠牲にしても明示的な指定が良いことはある。

31 :デフォルトの名無しさん:2011/12/17(土) 03:38:09.84
>>28は自力で分かりましたので撤回します。

32 :デフォルトの名無しさん:2011/12/17(土) 09:11:00.48
>>27
数値比較だろうがw

33 :デフォルトの名無しさん:2011/12/17(土) 09:45:46.47

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

var num; // 画面からの入力
if ( num >= -1) {
  // 入力値OK
} else {
  // 入力値NG
}

34 :デフォルトの名無しさん:2011/12/17(土) 11:29:20.09
文字が入力されたらどうするんだよ。


35 :デフォルトの名無しさん:2011/12/17(土) 11:32:37.06
>>34

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


36 :デフォルトの名無しさん:2011/12/17(土) 11:46:23.91
1,000,000の点は考えなくていいのかな?

37 :デフォルトの名無しさん:2011/12/17(土) 11:47:32.58
桁区切りのカンマ、小数点は入力時にエラーとして再入力を促します。

38 :デフォルトの名無しさん:2011/12/17(土) 12:14:41.04
それなら楽勝だね、お疲れ。

39 :デフォルトの名無しさん:2011/12/17(土) 12:34:48.56
>>37
変換(削除)してやれよ、それくらい。

40 :デフォルトの名無しさん:2011/12/17(土) 14:52:29.17
それは外部者が言うことじゃない。

41 :デフォルトの名無しさん:2011/12/19(月) 22:11:17.71
●正規表現の使用環境
c#

●検索か置換か?
検索

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

●対象データ
hogehoge120_hoge001218hoge1

●希望する結果
001218

42 :デフォルトの名無しさん:2011/12/19(月) 22:18:10.47
\d+で数字列検索してプログラム使って最長判定
正規表現だけじゃ無理

43 :デフォルトの名無しさん: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);

44 :デフォルトの名無しさん:2011/12/19(月) 23:10:12.46
>>42-43 ありがとん
やってみます。

45 :デフォルトの名無しさん:2011/12/20(火) 03:52:43.40
人に利用される馬鹿が教えてくれるスレ

46 :デフォルトの名無しさん:2011/12/22(木) 09:07:36.05
すみません。正規表現の

^\sd{4}$

とはどういう意味を表しているのでしょうか?

47 :デフォルトの名無しさん:2011/12/22(木) 09:10:41.34
行頭があって空白文字があってdが4つあって行末

48 :デフォルトの名無しさん:2011/12/22(木) 09:14:41.46
>>47
ありがとうございます。
ということは
[ 1234]
のような値でしょうか?

49 :デフォルトの名無しさん:2011/12/22(木) 09:16:04.63
なぜd だけ そのままなのww

50 :デフォルトの名無しさん:2011/12/22(木) 09:25:03.64
>>48
0-9のどれか1文字なら d じゃなくて \d
テンプレのリンクから一番やさしそうなの見つけて読んで

51 :デフォルトの名無しさん:2011/12/22(木) 09:27:26.26
>>48
そういうのを「思い込み」と言う

52 :デフォルトの名無しさん:2011/12/22(木) 09:33:46.25
>>50
ありがとうございます。
ということは
[ dddd]
なんですね。ということはこれはバグのような・・

53 :デフォルトの名無しさん:2011/12/22(木) 10:22:43.30
ばっかじゃないの。

54 :デフォルトの名無しさん: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


55 :デフォルトの名無しさん:2011/12/22(木) 10:36:57.01
頭がバグってきた

56 :デフォルトの名無しさん:2011/12/22(木) 10:40:21.24
試すだけなら
print "hit!" if (" dddd" =~ /^\sd{4}$/);
で十分。
べーしっくは大変ですなw

57 :デフォルトの名無しさん:2011/12/22(木) 14:46:34.31
すぽぽーん!!

58 :デフォルトの名無しさん:2011/12/22(木) 15:04:10.77
マッチって言おうぜ、ヒットって野球かよ。

59 :デフォルトの名無しさん:2011/12/22(木) 15:21:10.19
>>58
マッチしてるんだからヒットで良くね?

60 :デフォルトの名無しさん:2011/12/22(木) 17:07:10.08
トシちゃんでも何でもいいよ

61 :デフォルトの名無しさん:2011/12/22(木) 21:51:46.32
こんばんわ、膝方 歳三です。


呼んだ?

62 :デフォルトの名無しさん:2011/12/22(木) 23:34:54.98
ナウなヤングが多いスレですね

63 :デフォルトの名無しさん:2011/12/24(土) 03:42:49.26
ヒットじゃなくて三振だな

64 :デフォルトの名無しさん: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>は実際にはタブに置き換え

と、したいのですがどのようにすれば正規表現で置換する出来ますか?
"・"の数がまちまちなのと、行全体は残しつつ次の行に分割することが出来ず悩んでいます

65 :デフォルトの名無しさん:2011/12/28(水) 12:38:02.35
>行全体は残しつつ
行全体を同じ物で置換

66 :デフォルトの名無しさん:2011/12/28(水) 12:45:21.06
>>64
鬼車に置換機能はないというのはおいとくとして、
数が不定という点で正規表現だけではどうにもならんな。
$1とかで取り出す以上、上限を決めるとかしないと。

67 :デフォルトの名無しさん: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
,ソレ・ナンテ
,エロ
,ゲ

//ここまで

68 :デフォルトの名無しさん:2011/12/28(水) 13:50:26.35
^([^,]+,([^・\t]+)・([^・\t]+)(?:・([^・\t]+))?\t.+)$


69 :デフォルトの名無しさん:2011/12/28(水) 14:31:25.37
>>68
希望通りの分割が出来ました
良く分からない所があるのですがもう一度解説している所を読んで理解したいと思います
有難うございました

70 :デフォルトの名無しさん:2011/12/28(水) 23:11:31.85
 [^・\t

顔文字に見えた。
堅め開けた、しわくちゃの老人

71 :デフォルトの名無しさん:2011/12/29(木) 22:53:43.17
正規表現を使って、@マークが先頭にある半角数字に処理をかけたいと思っています。
ex.) @12345

ただ、データの中に「<a href=”〜”>@12345</a>」のようにHTMLタグのリンクタグが付与している場合があり、その場合でもマッチするようにしたいです。
「<a href=”〜”>@〜</a>」でも「@〜」でもマッチするようにするにはどうすればいいのでしょうか?

72 :デフォルトの名無しさん:2011/12/29(木) 23:27:18.01
<a href="[^"]+">@\d+</a>|@\d+

こういうことかな?

いまいち質問がわかりづらい
次に質問するときはテンプレつかってくれ

73 :デフォルトの名無しさん:2011/12/29(木) 23:34:40.12
鬼車なんてあったんだ隠語かと思ったら正式名称か

74 :デフォルトの名無しさん:2011/12/30(金) 00:43:50.80
>>71
@\d+ でいずれもマッチするが、簡単すぎてどこで躓いているのかよくわからん


75 :デフォルトの名無しさん:2011/12/30(金) 01:01:46.87
>>74
先頭じゃない場合もあるからじゃない?

76 :デフォルトの名無しさん:2011/12/30(金) 01:02:54.62
ごめん行頭と読み違えた

77 :デフォルトの名無しさん:2011/12/30(金) 06:36:35.31
>>73
このスレにいてRuby 1.9に使われてる正規表現エンジンの名前を知らんとはな。

スレのテンプレに、主要な正規表現ライブラリの紹介があってもいいかもしれない。

78 :デフォルトの名無しさん:2011/12/30(金) 10:08:17.68
>>77
そんなのべたべた貼っても読まねぇ

79 :デフォルトの名無しさん:2011/12/30(金) 20:39:29.00
正規表現のエンジンも色々あるからな
だからこそ環境書けと言われるワケで
逆に環境以上のことは蛇足じゃねーの

80 :デフォルトの名無しさん:2011/12/30(金) 20:46:28.60
質問用テンプレということではないのだが。

81 :デフォルトの名無しさん:2011/12/30(金) 21:57:21.07
このスレのレベルの低さは前スレ見れば分かる。回帰も知らないゴミの集まり。

82 :デフォルトの名無しさん:2011/12/30(金) 22:00:14.08
>>72
無事希望通りなものができました。
また質問が出たときはテンプレ使って質問しようと思います。
ありがとうございました。

83 :デフォルトの名無しさん:2011/12/30(金) 22:07:07.87
●検索か置換か?
置換

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

●対象データ
114514
810snpi
go

●希望する結果
415411
ipns018
og


84 :デフォルトの名無しさん:2011/12/30(金) 23:18:54.38
つreverse関数

85 :デフォルトの名無しさん:2011/12/31(土) 14:29:13.56
C#で以下の文字列lineからURLを抽出したいと思っています。

 The document has moved <a href="http://www.hoge.com/">here</a>.

Match m = Regex.Match(line, "href=\"(http://\S)\"", RegexOptions.IgnoreCase);
↑そこでそういうプログラムを組んでみたのですが正規表現の部分でエラーが発生してコンパイルエラーになってしまいます。
正しくプログラムするにはどうしたらいいでしょうか?

86 :片山博文MZ ◆0lBZNi.Q7evd :2011/12/31(土) 14:31:08.49
"href=\"(http://\S)\""はリテラル文字列だろ?
"href=\"(http://\\S)\""が正しい。

87 :デフォルトの名無しさん:2011/12/31(土) 14:32:06.62
\\

88 :片山博文MZ ◆0lBZNi.Q7evd :2011/12/31(土) 14:32:19.57
間違えた。
"href=\"(http://\\S+)\""

89 :デフォルトの名無しさん:2011/12/31(土) 14:44:16.90
urlを抽出する際に、httpsを考慮する必要はありませんか。

90 :片山博文MZ ◆0lBZNi.Q7evd :2011/12/31(土) 14:47:23.37
(https?://\\S+)
そこまで考えるなら、パーサのHTML Tidyを使う。

91 :85:2011/12/31(土) 14:57:57.85
みなさんアドバイスありがとうございます。
\をもう一つ付けることでコンパイルに無事成功しましたm(_ _)m

92 :片山博文MZ ◆0lBZNi.Q7evd :2011/12/31(土) 15:23:43.32
+もつけないとマッチしないよ。。。

93 :デフォルトの名無しさん:2011/12/31(土) 16:03:03.63
\Sを使うこと自体間違ってる。誤爆の可能性あるよ。

94 :デフォルトの名無しさん:2012/01/01(日) 01:25:06.56
つうかC#なら@""使え

95 :デフォルトの名無しさん:2012/01/01(日) 03:21:35.01
そういや@""の中で"を使うにはどうしたらいいんだろう?

96 : 【大凶】 【85円】 :2012/01/01(日) 08:55:00.69
エスケープできないの?
記号としての\を使いたい場合、\\になるように、
\"とかが用意されているのでは。

97 :デフォルトの名無しさん:2012/01/01(日) 09:38:04.03
@"printf(""hello"")" みたいに " を二回続ける(スレチ)

98 :デフォルトの名無しさん:2012/01/01(日) 15:31:57.27
詳細正規表現って本5040円もするけど安く手に入れられないかな。

99 :デフォルトの名無しさん:2012/01/01(日) 15:41:01.14
>>98
アマゾンに\4,000(送料別)の中古があったよ

100 :デフォルトの名無しさん:2012/01/01(日) 16:58:17.25
>>99
ありがとうです。でもまだ高いorz

101 :デフォルトの名無しさん:2012/01/01(日) 17:24:17.39
●正規表現の使用環境
C#

●検索か置換か?
置換

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

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

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

よろしくお願いします

102 :デフォルトの名無しさん:2012/01/01(日) 17:27:41.94
^\((.*?)\)(.*)
\1\2

103 :デフォルトの名無しさん: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行目の様な物が煩わしいので一括に処理したいです
お願いします

104 :デフォルトの名無しさん:2012/01/01(日) 22:58:24.51
[ ]*([ぁ-煕]+)[ ]*

\1

105 :デフォルトの名無しさん:2012/01/01(日) 23:11:50.26
>104
ご回答ありがとうございます
しかし、それでは全角と半角の間以外のスペースも消えてしまうので
想定した動きと違います。ごめんなさい。

106 :デフォルトの名無しさん:2012/01/01(日) 23:38:06.31
[ぁ-煕]ってUnicodeだと使えないがいいんかな。

107 :デフォルトの名無しさん:2012/01/02(月) 13:39:42.23
文字列「犬」と「猫」を含む一行を検索するときは

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

と書けばいいですよね
では、文字列「犬」と「猫」と「鳥」と「牛」の全てを含む一行を検索する場合はどのように書けばいいのでしょうか?


108 :デフォルトの名無しさん:2012/01/02(月) 13:56:54.73
if文使うのが計算量少ないと思う。
正規表現だけは諦めて。

109 :デフォルトの名無しさん: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; }

110 :デフォルトの名無しさん:2012/01/02(月) 14:07:39.08
(?=.*犬)(?=.*猫)(?=.*鳥)(?=.*牛)

111 :104:2012/01/02(月) 14:47:35.93
>>106
たまに誤認識シてたのはそれだったのかも知れませんね
unicode対応らしい物を探してきました

・(英数字以外) (英数字)のパターン
([^([,?!-<>?….!々〇?\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF])]) ([々〇?\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]+)
・(英数字) (英数字以外)のパターン
([々〇?\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]+) ([^([,?!-<>?….!々〇?\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF])])

とりあえず個々には動作してるように見えるのですが、これをひとつに纏めつつ
「全 半 全」「全 半 半 全」「全 半全」「全半 全」を満たすように書き換えたいのですがそれがわかりません…

112 :デフォルトの名無しさん:2012/01/02(月) 14:52:30.99
日本語のコードは正規表現で使わない方が良い。
検索対象の文字コードに依存する。
ASCIIだけの特徴を使って検索するのが、仕様変更などにも対応できる可能性。

113 :112:2012/01/02(月) 15:03:03.29
こんなのやってみたが。消しきれず。

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

114 :112:2012/01/02(月) 15:05:57.04
英文とその前後の空白にヒットさせるという方法だが、終わりの空白が取り除けない。

115 :デフォルトの名無しさん:2012/01/02(月) 15:09:47.82
ほらよ

(犬.*猫.*鳥.*牛)|(犬.*猫.*牛.*鳥)|(犬.*鳥.*猫.*牛)|(犬.*鳥.*牛.*猫)|(犬.*牛.*猫.*鳥)|(犬.*牛.*鳥.*猫)|


116 :112:2012/01/02(月) 15:11:27.97
これで例文はできた。

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

\1

117 :デフォルトの名無しさん:2012/01/02(月) 15:32:48.77
頭に犬が来ない場合はどうするのかと

118 :デフォルトの名無しさん:2012/01/02(月) 15:46:13.41
>>117
最後が|だから、これからシリーズでUpしてくれるよ

119 :デフォルトの名無しさん:2012/01/02(月) 15:58:19.28
24通り書く気かよw
十二支の場合はどうする気だよww

120 :デフォルトの名無しさん:2012/01/02(月) 16:03:10.71
ループでそとつヒットしなかったら探索終了が速いって。
正規表現で全パターンは負荷かかりすぎ。

121 :デフォルトの名無しさん:2012/01/02(月) 16:11:59.61
逆に、

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

を削除すれば

122 :デフォルトの名無しさん:2012/01/02(月) 16:18:48.97
(?:犬(?:(猫)?鳥牛(?(1)|猫)|(鳥)?猫牛(?(2)|鳥)|牛(?:猫鳥|鳥猫))|猫(?:(鳥)?牛犬(?(3)|鳥)|(牛)?鳥犬(?(4)|牛)|犬(?:鳥牛|牛鳥))|鳥(?:(牛)?犬猫(?(5)|牛)|(犬)?牛猫(?(6)|犬)|猫(?:牛犬|犬牛))|牛(?:(犬)?猫鳥(?(7)|犬)|(猫)?犬鳥(?(8)|猫)|鳥(?:犬猫|猫犬)))

123 :デフォルトの名無しさん:2012/01/02(月) 16:21:22.32
どう見ても京都猛禽類研究所です。本当にありがとうございました

124 :122:2012/01/02(月) 16:28:08.70
ごめん、質問をちゃんと見てなかったわ
これでおk
長すぎるって怒られたから改行しといた

(?:犬.*(?:(猫)?.*鳥.*牛.*(?(1)|猫)|(鳥)?.*猫.*牛.*(?(2)|鳥)|牛.*(?:猫.*鳥|鳥.*猫))|
猫.*(?:(鳥)?.*牛.*犬.*(?(3)|鳥)|(牛)?.*鳥.*犬.*(?(4)|牛)|犬.*(?:鳥.*牛|牛.*鳥))|
鳥.*(?:(牛)?.*犬.*猫.*(?(5)|牛)|(犬)?.*牛.*猫.*(?(6)|犬)|猫.*(?:牛.*犬|犬.*牛))|
牛.*(?:(犬)?.*猫.*鳥.*(?(7)|犬)|(猫)?.*犬.*鳥.*(?(8)|猫)|鳥.*(?:犬.*猫|猫.*犬)))

125 :デフォルトの名無しさん:2012/01/02(月) 16:28:52.24
先読み使えるなら>>110でいいじゃん

126 :デフォルトの名無しさん:2012/01/02(月) 16:29:46.90
>>116
試してみたのですが 「aaaaa - aaaaaa」 や 「aa aaaa」なども消えてしまいます
全角と半角の間のスペースを消すだけなので、例題に載せなかったのがいけなかったのかもしれません。
>104を正規表現で表現するのは難しいのでしょうか?
環境は多分utf-8なので条件依存していても構わないのですが。

127 :126:2012/01/02(月) 16:31:28.71
>104を正規表現で表現するのは難しいのでしょうか?

>103を正規表現で表現するのは難しいのでしょうか?
に修正します。すみません

128 :デフォルトの名無しさん:2012/01/02(月) 16:33:40.56
>>126
>しかし、それでは全角と半角の間以外のスペースも消えてしまうので
例えばどういうの?サンプルが少なすぎる

129 :デフォルトの名無しさん:2012/01/02(月) 16:36:55.88
十二支の方が簡単そうじゃね
子・丑・寅・卯・辰・巳・午・未・申・酉・戌・亥だろ?

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

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

又は

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

とりあえず上のように検索してダメだったら別の文字列を変えればいい

130 :デフォルトの名無しさん:2012/01/02(月) 16:38:57.88
>>126
半角の英文と見なす記号・文字を追加。これは-の場合。

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

131 :129:2012/01/02(月) 16:40:57.27
ちがうちがう

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

又は

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

だな
猪を二頭探してどうする俺w

132 :デフォルトの名無しさん:2012/01/02(月) 16:47:50.36
 全[space] → 全
 [space]全 → 全

の2回に分けるのじゃだめ?

133 :デフォルトの名無しさん:2012/01/02(月) 16:49:53.21
英文か、全角日本語しかないんだろ。
英文とその前後の空白を特定できれば済むんだよ。

134 :デフォルトの名無しさん: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ですよね。それしか無いでしょうか

135 :デフォルトの名無しさん: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...

136 :デフォルトの名無しさん:2012/01/02(月) 17:06:20.63
>>125
先読みが使えない場合はどうするの?

137 :デフォルトの名無しさん:2012/01/02(月) 17:10:05.43
[  ]*(([0-9A-Za-z\-:\.]+ ){0,}[0-9A-Za-z\-:\.]+)[  ]*

138 :デフォルトの名無しさん:2012/01/02(月) 17:27:57.62
>137
この行のスペース2個は難しそうですか?
身も心も Justin Drew Bieber の物。

139 :デフォルトの名無しさん:2012/01/02(月) 17:46:05.19
どこにspace2個あるんだよ?

140 :デフォルトの名無しさん:2012/01/02(月) 17:46:15.19
>>111
どっから持ってきたかは知らんが、>>112も書いてるようにやめた方がよい。
せめて \p{ASCII} みたいな文字プロパティにすべき。

141 :デフォルトの名無しさん:2012/01/02(月) 17:47:48.27
>>136
24通り並べる。

142 :デフォルトの名無しさん:2012/01/02(月) 17:56:32.09
>>136,141
>>124


143 :デフォルトの名無しさん:2012/01/02(月) 18:44:47.04
>>124は24通り全部並べる代わりに条件分岐使ってまとめてあるだけだが、
やってることは変わらないし、条件分岐使える環境なら先読みも使えるはず。

144 :デフォルトの名無しさん:2012/01/02(月) 19:17:53.99
結論:先読み検索できる環境にデータごと移行させろ

145 :デフォルトの名無しさん:2012/01/02(月) 20:53:33.35
「出資者は無理難題をおっしゃる」

データ加工に便利な環境に移せるなら、それも手ですね。

146 :デフォルトの名無しさん:2012/01/02(月) 21:38:31.49
>>139
2chだとわからなくなっちゃうのでしょうか。わかりにくくてすいません
身も心も Justin[][]Drew Bieber の物。
コピペすると分かるのですがここに2個スペース入っていました。
スペースが2個あると消えてしまうようでしたが事前にスペース2個を1個に変換することにします
毎日使っているものなので大切に活用させて頂きます。有難うございます

147 :デフォルトの名無しさん:2012/01/02(月) 23:52:34.43
●正規表現の使用環境
javascript

●検索か置換か?
検索

●説明
以下の2つのデータ共にマッチするようにしたい

●対象データ
<a href=”http://〜.hogehoge.com/〜/”>〜</a>
<a http://〜.hogehoge.com/>〜</a>

/<a href=”http:\/\/.+?\.hogehoge\.com\/.+?\/?”>.+?<\/A>/gi
のようにコードを書いてみたのですが、どうもうまくいきません。
どのように記述すればいいのでしょうか?

148 :デフォルトの名無しさん:2012/01/03(火) 00:33:34.83
それ本当は「2つのデータにマッチ」が目的じゃないだろ
テンプレ使うならちゃんと希望する結果まで書けよ

149 :デフォルトの名無しさん:2012/01/03(火) 00:39:11.64
<a href=”http://〜\.hogehoge\.com/〜/”>〜</a>|<a http://〜\.hogehoge\.com/>〜</a>

これでどちらのデータにもマッチする

150 :デフォルトの名無しさん:2012/01/03(火) 00:41:21.84
>>147
やりたいのはこういうこと?
/<a href="http:\/\/.*\.hogehoge\.com\/(.+\/)?".*<\/a>/

151 :てすすき:2012/01/03(火) 00:55:19.17
●JavaScriptかPHP(なければなんでも)
●置換
●現在パターンにマッチしている回数(試行回数でも)を置換後に埋め込むことできましたっけ?
●あいうあいうあいう・・・
●1あいう2あいう3あいう・・・


152 :デフォルトの名無しさん:2012/01/03(火) 03:33:11.94
var count = 0;
var callback = function(x) {
return (++count) + x;
};
"あいうあいうあいう".replace(/あいう/g, callback);


153 :てすすき:2012/01/03(火) 09:44:43.57
>>152
ありがとうございます
あコールバックありましたねphpも探したらありそう
正規表現だけだと無理ですよね

154 :147:2012/01/03(火) 10:58:55.34
>>148
すんません。その通りです。

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

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

155 :デフォルトの名無しさん:2012/01/03(火) 12:17:33.31
>>154
/<a href=\"http:\/\/(.+)\.hogehoge\.com\/(.*)\/?\">(.*)<\/a>/

置換したい文字列を"$1,$2,$3"とかにすれば
上は mag,sky,ほげほげ
下は mos,,もげもげ
みたいに置換されるんじゃないかな。

156 :147:2012/01/03(火) 13:51:54.18
>>155
/<a href=\"http:\/\/(.+)\.hogehoge\.com\/(.*?)\/?\">(.*)<\/a>/

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

と動くようになりました。
ありがとうございました。本当感謝です。


157 :デフォルトの名無しさん: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/


158 :デフォルトの名無しさん: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);
?>


159 :デフォルトの名無しさん:2012/01/10(火) 17:55:27.75
●正規表現の使用環境
テキスト

●検索か置換か?
置換

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

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

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

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

夜中、下半身がもぞもぞするので目が覚めると、先生が私の浴衣の裾を広げていました。
-------------------------
よろしくお願いします。

160 :デフォルトの名無しさん:2012/01/10(火) 20:28:17.52
.*\n.*\n.*\n

\0\n

161 :デフォルトの名無しさん:2012/01/10(火) 21:41:34.61
\0でマッチした部分全部を参照できる環境があるのか
後学のために環境名をおしえてくれ

162 :デフォルトの名無しさん:2012/01/10(火) 21:57:34.29
>>161
結構あるから困る

163 :デフォルトの名無しさん:2012/01/10(火) 23:16:46.84
>>160
ありがとう。○┓

164 :デフォルトの名無しさん:2012/01/11(水) 11:52:22.67
>>161
できないほうをおしえろ。

165 :デフォルトの名無しさん:2012/01/11(水) 12:10:54.85
たとえばPHP使うとマッチ全体がゼロ番目に入ることがprint_r使うと分かるが。

166 :デフォルトの名無しさん:2012/01/11(水) 12:38:37.57
>>164
perl

167 :デフォルトの名無しさん:2012/01/11(水) 12:45:30.05
あとpythonもかな。
perl: $&、python: \g<0>

168 :デフォルトの名無しさん:2012/01/11(水) 12:56:35.50
>>160はこっちがいいということか。

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

\1\n

169 :デフォルトの名無しさん:2012/01/11(水) 22:38:22.06
Emエディタでは、
.*\n.*\n.*\n

(.*\n){3}
ではマッチに差が出る。
これは正常なのか。

170 :デフォルトの名無しさん:2012/01/13(金) 23:05:20.51
文字列「ソース」を含む行を抽出したい
ただし「リソース」「ソース顔」などは弾きたい
この場合、どのように表記すればいいのでしょうか?

^ソース$
くらいしか思いつきませんでした
どなたかご教授お願いします


171 :デフォルトの名無しさん:2012/01/13(金) 23:40:00.44
質問があいまいで答えようがない

172 :デフォルトの名無しさん:2012/01/13(金) 23:45:53.00
>>170
完全には無理。
「ソースがおいしい」
という行があった時、それが「ソース顔の石井さん」という意味ならヒットしてはいけないし、
「ソースが美味しい」という意味なら、ヒットしてほしい。
正規表現だけで、完全に判別するのは不可能だ。

173 :デフォルトの名無しさん:2012/01/13(金) 23:50:49.78
>>171-172
レスありがとうございました
割り切るようにします

検索地獄から解放されて良かったです

174 :デフォルトの名無しさん:2012/01/14(土) 00:01:30.70
>>173
\bソース\b
とかどうでしょうか?

ちなみに\bは単語境界にマッチする幅0のメタ文字で、
上記はテキストエディタ等で単語検索とか
ワード検索とかよばれるものと等価です

175 :デフォルトの名無しさん:2012/01/14(土) 00:11:59.19
それは英語などでは有効な手法だけど、日本語の文章を対象にする場合ほとんど無意味

176 :デフォルトの名無しさん:2012/01/14(土) 00:23:27.79
形態素解析で下ごしらえが必要。

177 :デフォルトの名無しさん:2012/01/14(土) 00:53:57.14
「ソース」の前後がカタカナではない
「ソース」の後が漢字ではない

で手間は省けるか?でもどうかくのかな

178 :デフォルトの名無しさん:2012/01/14(土) 01:06:43.97
できないこともないんだけど、ソースの後が漢字ではないを指定できたとして、
「この料理をおいしく食べるためにはソース選びが重要」の「ソース」が排除されるよ。

179 :デフォルトの名無しさん:2012/01/14(土) 01:56:17.32
正規表現は日本語文字列には向かないからな

180 :デフォルトの名無しさん:2012/01/14(土) 03:35:58.90
正規表現がどうって話じゃないでしょ。
boxを抽出したいけどtreasure boxは弾きたいって言ってるようなもんでしょ。

181 :デフォルトの名無しさん:2012/01/14(土) 09:25:17.26
もし自分がやるとしたら、ソースの前後がカタカナではないという条件にするかな。それで大半はうまくいくはず。
ソース顔とかはヒットしてしまうが、後で結果を見直して、手動で消去する(手動が許されるなら)。

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

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

まあ、何のために検索したいかによるよね。ちょっと多少ゴミが混じってもいいというのなら上記のでいいと思うけど、
完璧にヒットさせたいと思うなら、正規表現では無理だ。

182 :デフォルトの名無しさん:2012/01/14(土) 12:08:57.43
>>180
日本語の場合分かち書きしないから単語境界も使えない、
というわけで、日本語は正規表現も含めて検索性が悪いよ。

getを検索してnuggetを弾くようなことも難しいわけ。

183 :デフォルトの名無しさん:2012/01/14(土) 12:16:39.74
>>180は単語境界が使える英語でさえ処理が難しいケースを挙げてるんだと思うよ

184 :デフォルトの名無しさん:2012/01/14(土) 12:21:19.98
英語でも難しいケースはあるが、英語の場合日本語よりは楽なので
「正規表現は日本語文字列には向かない」というのにはそれなりの妥当性がある

185 :デフォルトの名無しさん:2012/01/14(土) 13:33:31.04
C#.netで正規表現で文字列チェックするんだけど、
正規表現って、普通に1文字チェックするより高速なの?


186 :デフォルトの名無しさん:2012/01/14(土) 13:43:38.91
本当に速度がクリティカルに効いてくる状況ならちゃんと測定すべき。
そうでないなら実装しやすい方で。

187 :デフォルトの名無しさん:2012/01/14(土) 14:10:14.61
ソースファイルとか普通に使うよ

188 :デフォルトの名無しさん:2012/01/14(土) 14:35:46.57
>>186
馬鹿丸出しの質問にレスありがとう。
やっぱそうだよね、場合によるよね。

比較の記事とかネットにないかぐぐったけどなさげだったので質問してみました。


189 :デフォルトの名無しさん:2012/01/14(土) 16:52:35.86
実際自分でコード書くよりライブラリ使った方が
速いときが多いよね
コードの洗練さとかの関係で

190 :デフォルトの名無しさん:2012/01/14(土) 17:31:01.32
日本語は助詞でつなぐからな
英語だと半角スペースがあるので指定単語を抽出しやすい

191 :デフォルトの名無しさん:2012/01/14(土) 17:46:59.25
ここではきものを脱いでください

BGMによって着物か履物かわかれる。

192 :デフォルトの名無しさん:2012/01/14(土) 18:42:21.35
BGM?

193 :デフォルトの名無しさん:2012/01/14(土) 18:54:04.02
加トちゃんのBGMなら着物を脱ぐんじゃないの

194 :デフォルトの名無しさん:2012/01/14(土) 21:05:12.37
「一休さん」くらいの文言で良かったのに…

195 :デフォルトの名無しさん:2012/01/14(土) 21:07:37.14
このはしわたるべからず、ってやつ?
それはそうと>>191の例は超有名。BGMはシラネ

196 :デフォルトの名無しさん:2012/01/14(土) 21:30:16.88
木の葉皺たるべからず

木の葉は皺であるはずがない

197 :デフォルトの名無しさん: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>

198 :デフォルトの名無しさん:2012/01/15(日) 01:42:24.89
<div class="main">(.*\n?)*?</div>

適当だけどこれでどうだろう

199 :デフォルトの名無しさん:2012/01/15(日) 01:51:11.62
>>198
うーむ、マッチしないみたいです。。
レスありがとうございます。

200 :デフォルトの名無しさん:2012/01/15(日) 02:51:10.19
([.\n]*?)
でもだめなのかな

201 :デフォルトの名無しさん: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>かな


202 :デフォルトの名無しさん: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>

203 :202:2012/01/15(日) 03:02:39.67
被った。。。ゴメン

204 :デフォルトの名無しさん: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まで頂いてありがとうございます。
解決した正規表現見てもなかなか理解が進まないのでもっと勉強します。
レス下さった皆さん本当にありがとうございます。感謝です。

205 :200:2012/01/15(日) 14:26:26.74
>>204
そういう風に使うもんじゃなかったんだけど、そもそも秀丸固有の問題があるのを知らなかったごめん。

206 :デフォルトの名無しさん:2012/01/16(月) 19:34:46.94
掲示板にあるURLやアンカを削除するために、compileメソッドの引数にURLとアンカの正規表現を使いたいんですがどう書いたら良いですか?

207 :デフォルトの名無しさん:2012/01/16(月) 19:40:09.08
すいません>>206はjava言語です。


208 :デフォルトの名無しさん:2012/01/16(月) 20:28:26.54
あれ、このスレになかった?
頻出だとおもうんだけどなぁ

209 :デフォルトの名無しさん:2012/01/16(月) 20:39:28.87
Javaで動く出来合いのコードが欲しいんだろう

210 :デフォルトの名無しさん:2012/01/16(月) 21:05:33.12
>>209さんのおっしゃる通りです。宜しくお願いします。

211 :デフォルトの名無しさん:2012/01/17(火) 00:10:56.53
どこの掲示板かとかdatなのか見た目なのかとかで変わってくる。
一口にurlと言ってもurlにもいろいろあるからどこまでをurl扱いにしたいかってこともある。

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

ちなみにurlよりやっかいなのがメールアドレス。どこまでメールアドレスとして認識させたいかが
その状況によって大きく変わってくるから。

212 :デフォルトの名無しさん:2012/01/17(火) 01:43:51.22
Bashスクリプトのif文で正規表現ってかけないのかな?

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

こんな感じでいけそうだけど上手くいかない

213 :デフォルトの名無しさん: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

214 :206:2012/01/17(火) 02:43:42.22
>>211
教えて頂きありがとうございます。
では試しに2chの場合どう正規表現で書くのでしょうか?

2ch掲示板のdatファイルを見るとURLの終わりに半角空白があるので"^(http|https).*/s"といった感じでしょうか?
アンカの正規表現は思い付かないですorz

215 :デフォルトの名無しさん:2012/01/17(火) 03:22:55.40
性器表現

216 :デフォルトの名無しさん:2012/01/17(火) 16:25:00.67
>>214
2chの場合はこうじゃないの。サブサブドメインは見たことないと思う。
http://[a-z]*\.2ch\.net/

217 :デフォルトの名無しさん:2012/01/17(火) 16:52:21.66
ホスト部は数字も含むでよ

218 :デフォルトの名無しさん:2012/01/17(火) 19:20:06.75
桜蘭高校ホスト部は関係無いだろ

219 :デフォルトの名無しさん:2012/01/17(火) 21:20:23.99
落ち着け。

220 :206:2012/01/17(火) 21:42:42.74
>>216
ありがとうございます。参考にさせて頂きます。

221 :デフォルトの名無しさん:2012/01/17(火) 22:17:10.60
>>220
質問の内容が2chのdatファイルにある、いずれかのレスに含まれているURLを指していると思うんだけど
それなら半角スペースが入ってるとかそんなルールないよ。
たとえばhttp://example.comとか http://example.com とか、このスレのdat見てみ

222 :デフォルトの名無しさん:2012/01/18(水) 01:33:00.66
まあなにか終わりを判別するものがないと困るから、
(まだURLが終わってないってことになるから)
URLの「後ろに」空白文字(改行含む)を書いてる人が多いだけでしょ。

223 :デフォルトの名無しさん:2012/01/18(水) 02:11:31.53
特に困らないよ。
日本語URLとかかかれちゃうと困るけど

224 :デフォルトの名無しさん:2012/01/18(水) 07:22:00.60
全角文字(2バイト文字?)だけを検索するには
なんと書くんでしょうか?

225 :デフォルトの名無しさん:2012/01/18(水) 08:02:49.11
[ぁ-ヶ]|[亜-K]

226 :デフォルトの名無しさん:2012/01/18(水) 09:13:10.85
正規表現以外で文字列検索するなら最強の検索方法は何でしょうか?

227 :デフォルトの名無しさん:2012/01/18(水) 09:54:21.57
Procmailで転送設定していたのですが、正規表現でどう書けば
いいのか分からないので教えてください。

* ^(From).*test@test.co.jp
.Sent.2012/

上記の条件で転送していたのですが、上記だとResent-From:の
ヘッダが先に条件として判定されてしまうようで、Resent-Fromでは
なくFromが○○だったら。としたいのですがどうすれば良いでしょうか。

228 :227:2012/01/18(水) 10:26:12.57
自己解決しました。ANDで条件書けば良いだけでした。失礼しました。

229 :デフォルトの名無しさん:2012/01/20(金) 00:31:32.03
2時間ほど悩みましたが、解決方法が見つからないので教えて下さい。
検索条件 ★で始まり、間に「あ」を挟み、★でおわる
★と「あ」の間にはx文字(0〜10文字)ランダムに挟まっている
例文
★123あ133s★124か1256★863あ13qw3s★1rtyさ12fd★あ1s★
抜き出したい箇所
★123あ133s★
★863あ13qw3s★
★あ1s★
どなたか頭のいいかた解決方法教えて下さい。

230 :デフォルトの名無しさん:2012/01/20(金) 00:38:38.68
★.*?あ.*?★

231 :デフォルトの名無しさん:2012/01/20(金) 00:53:35.04
プリクラでメンチ切ってる武丸さんみたいな正規表現だな

232 :デフォルトの名無しさん:2012/01/20(金) 01:12:53.52
>>229
>>1
環境によっては"量指定子?"の最短一致は使えないんじゃないかな
せっかく10文字という条件が出てるので、
★[^あ]{0,10}あ[^★]{0,10}★
「あ」と「★」の間も0〜10文字でいいと勝手に解釈したー

233 :デフォルトの名無しさん:2012/01/20(金) 01:45:25.09
{n,m}が使える環境なら*?も使えるんじゃね?

234 :デフォルトの名無しさん:2012/01/20(金) 01:45:42.30
>230
>232
有難う御座います。
解決しそうです

235 :デフォルトの名無しさん:2012/01/20(金) 04:25:27.26
>>233
そんなことないよ。*?はそれとは別物

236 :デフォルトの名無しさん:2012/01/20(金) 04:41:23.07
教える側のレベルが低すぎてどうしようもないなこのスレ・・

237 :デフォルトの名無しさん:2012/01/20(金) 06:28:25.47
そんなことをぼやいているようじゃやってけないぞ

238 :デフォルトの名無しさん:2012/01/20(金) 11:05:03.91
>>236
お前が教えてみろよ。低脳のくせに。

239 :デフォルトの名無しさん:2012/01/20(金) 11:49:25.16
質問させてください。
半角文字列にスペースが含まれています。


727 751 798 625 791 460 645 850 656 697.......
このスペースをカウントして,3つめのスペースだけを改行に置換する場合(下)
727 751 798
625 791 460
645 850 656
697.......

どう表現すればいいのでしょうか?

数値が全て3桁ならば分かるのですが,2桁や4桁が含まれており文字数ではマッチできません。
よろしくお願いします


240 :デフォルトの名無しさん:2012/01/20(金) 12:32:06.29
/(\d+\s\d+\s\d+)\s/g --> $1\n

241 :239:2012/01/20(金) 13:54:10.15
>240

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

使用環境はMacです。



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

243 :デフォルトの名無しさん:2012/01/20(金) 13:59:42.25
>241

>1の説明に

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

と書いてありますよ。

244 :239:2012/01/20(金) 14:04:16.68
申し訳ありません

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

よろしくお願い致します

245 :デフォルトの名無しさん:2012/01/20(金) 14:11:05.27
>>241
自分の使っている処理系のヘルプを読め。
正規表現は合ってるし、おそらくこれが使えない正規表現エンジンはないか、ほとんどない。

246 :デフォルトの名無しさん:2012/01/20(金) 14:24:25.21
>>232は「★い★あ★」にマッチするはず。

247 :デフォルトの名無しさん:2012/01/20(金) 15:22:36.22
置換先が違うのかも。\1とか。
でもそれぐらいは質問者で対応するか。

248 :デフォルトの名無しさん:2012/01/20(金) 15:29:05.94
>>245
鬼車らしい

249 :239:2012/01/20(金) 17:59:18.96
すみません
初めて正規表現を使うのでよく理解出来ていないかもしれませんが,
MacOS, 10.6,iText express では鬼車とよばれる正規表現ライブラリ
が用いられることは理解できました。
ただ問題の構文では検索が出来ません。
Mac では円記号の代わりにバックスラッシュを用いても結果は同じなのでしょうか?他にもなにか気をつけなければいけないことってあるでしょうか?

250 :デフォルトの名無しさん:2012/01/20(金) 18:10:08.97
ソフトの使い方はスレ違いだから
気を付けてくれたまえ

251 :デフォルトの名無しさん:2012/01/20(金) 18:10:33.37
>>249
簡単な正規表現なのでそのソフトを使ってる人に片っぱしから聞くのが早いよ
該当スレがあればそっちで聞く

あるいは正規表現で検索/置換するウインドウと
ヘルプの該当項目のスクリーンショットを撮ってどこかにUPすれば答えられるかもしれない

252 :239:2012/01/20(金) 18:15:13.39
レスありがとうございます
出直してきます

253 :デフォルトの名無しさん:2012/01/20(金) 18:29:48.66
二度とこなくていいよ^^

254 :デフォルトの名無しさん:2012/01/20(金) 18:34:22.10
マック板は2つもあるんだから
そこで糞スレでも立てとけば暇な人がやってくるよ

255 :デフォルトの名無しさん:2012/01/20(金) 20:54:46.64
Macは「これ!」というエディタが無いのがな〜
Cot editorもWindowsのSakura editorに比べたら数年前世代の出来だし

256 :デフォルトの名無しさん:2012/01/20(金) 21:05:46.95
Sakura、ここ数年でそんな変わってんの?

257 :デフォルトの名無しさん:2012/01/20(金) 22:05:09.81
内部コードがUNICODEになった。

258 :デフォルトの名無しさん:2012/01/20(金) 22:47:04.58
鬼車って英語で言うとDemon
Car って言うらしいよ。



興奮先生が言ってた。

259 :デフォルトの名無しさん:2012/01/21(土) 00:13:07.30
日本語の「鬼」に相当する概念がないからアレ

260 :デフォルトの名無しさん:2012/01/21(土) 00:51:44.72
じゃあ鬼を定義してみる
・角が生えるイメージ戦略
・既婚女性(鬼女)

261 :デフォルトの名無しさん:2012/01/21(土) 00:53:16.75
ONI Devil

262 :デフォルトの名無しさん:2012/01/21(土) 01:03:03.70

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


delta0011zzzさん
demon: ギリシャ神話でいう神々と人間の中間にあると考えられる悪魔。ただし悪魔となったのは後で神と人間の間の存在が元々の意味
devil: キリスト教でいう神に対する悪魔
Satan: 「悪」の擬人化されたもの; ヘブライ語で「敵」という意味で, キリスト教では神に敵対する悪魔の王といったところです
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1113583021

263 :デフォルトの名無しさん:2012/01/21(土) 01:08:40.77
Daemon Carなら許せるがな。


264 :232:2012/01/21(土) 01:33:06.76
無理やり英語にする意味がわからないw<oniguruma

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

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

>>236 ハンセイ…精進します

265 :デフォルトの名無しさん:2012/01/21(土) 03:28:53.08
そんなこんなでOgreKitって名前がついたんでしょう

266 :デフォルトの名無しさん:2012/01/21(土) 03:34:22.67
オグレかとオモたらオーガだったのか

267 :デフォルトの名無しさん:2012/01/21(土) 05:08:45.10
>>264
★あ★あ★あ★

から

★あ★
★あ★
★あ★

を抜き出すのは無理。

268 :デフォルトの名無しさん:2012/01/21(土) 05:10:37.13
あ、間違った…

269 :デフォルトの名無しさん:2012/01/21(土) 05:14:51.33
見つかった先頭位置から1文字ずらしてけばいいじゃん


270 :デフォルトの名無しさん:2012/01/21(土) 05:17:40.12
それと★をセパレータとみなしても取り出せるし
自分で正規表現組めないなら無理して使う意味ないよ

271 :デフォルトの名無しさん:2012/01/21(土) 06:04:09.62
多くの環境では無理じゃない。環境書かないから答え書かない。

272 :デフォルトの名無しさん:2012/01/21(土) 08:50:54.19
会話本文と置換したい文が紛らわしい。
もうちょっと書き込み見直してよ('A`)

273 :デフォルトの名無しさん:2012/01/21(土) 11:36:34.09
>>269
見つかった先頭位置?
末尾の位置 (lastIndex) じゃなくて?

>>270
え?セパレータ?

274 :デフォルトの名無しさん:2012/01/21(土) 19:12:11.59
>>229
/★[^★あ]*あ[^★]*(?=★)/g


275 :デフォルトの名無しさん:2012/01/21(土) 22:21:32.64
アスキーアートを正規表現に変換して文書から除去したいんですがどう書けば良いのでしょうか?

276 :デフォルトの名無しさん:2012/01/21(土) 22:22:11.57
すいません>>275はjavaです。

277 :デフォルトの名無しさん:2012/01/21(土) 22:26:51.85
>>275
正規表現でAAあぼ〜ん
http://toro.2ch.net/test/read.cgi/tech/1189246036/

278 :デフォルトの名無しさん:2012/01/21(土) 22:30:25.16
>>277
教えてくださって恐縮なんですがどれが正しいアスキーアートの正規表現なのか解らないですorz

279 :デフォルトの名無しさん:2012/01/21(土) 22:36:25.50
専用スレで聞けってことだよ

280 :デフォルトの名無しさん:2012/01/21(土) 22:46:10.28
>>279
すいませんありがとうございました。

281 :デフォルトの名無しさん:2012/01/22(日) 11:32:50.40
>>248
鬼車はUnicodeで使うと\dが全角数字にマッチするし、
\sは全角スペース等にもマッチするようになる
(\wはASCIIの[A-Za-z_]以外にも多バイト文字にもマッチする)

鬼車を正規表現エンジンで採用してるRuby 1.9系列は内部Unicodeだけど
\dが全角数字にマッチしないように細工してる
\sも細工してるかは忘れたけど、\wは細工ないので、
多バイト文字にもマッチする

282 :デフォルトの名無しさん:2012/01/22(日) 16:52:22.17
鬼車はオプション次第で動作がかなり変わるから、「鬼車は、〜だ」という言い方は出来ないな。
>>281が書いたような細工をしてから使っているという話もよく聞くから余計に。jane view作者もいじってから使ってる。

283 :デフォルトの名無しさん:2012/01/22(日) 18:32:14.08
全然正規じゃないよね

284 :デフォルトの名無しさん:2012/01/22(日) 22:33:03.38
>>281
Rubyは\wもいじってる。(でも\bはいじってない。)

285 :デフォルトの名無しさん:2012/01/23(月) 09:14:46.41
>>284
¥bって¥wと¥Wの境目だと思ってたんだけど、¥wいじって¥bいじらないと
その関係が成り立たなくて困らないんだろうか

286 :デフォルトの名無しさん:2012/01/23(月) 11:33:53.02
a、bどちらかの一文字にマッチ、という場合 a|b と [ab] はどちらかが好ましいってのはある?


287 :デフォルトの名無しさん:2012/01/23(月) 11:41:35.82
本来の「正規表現」だと、[ab]はa|bの糖衣表現でしかないから差はない。
ただ今のは全て拡張正規表現だから実装による。大差ないだろうけど。

見た目的にはa|bは結局カッコで囲む必要があるケースが多くうざくなりがち。

288 :286:2012/01/23(月) 11:53:16.85
>>287
分かり易い説明ありがとう

289 :デフォルトの名無しさん:2012/01/23(月) 12:02:02.39
[a-z]の範囲指定は|の列挙より効率いいこと多いでしょうね。

290 :デフォルトの名無しさん:2012/01/23(月) 12:33:04.74
速度よりも可読性を優先してます。

291 :デフォルトの名無しさん:2012/01/23(月) 13:46:21.55
>>285
Rubyでは\p{Word}と\P{Word}の境目とされている

292 :デフォルトの名無しさん:2012/01/23(月) 17:44:16.32
>>285
よく分からんが仕様だとさ。
http://bugs.ruby-lang.org/issues/5208

ちなみに、Javaも\wと\bの対応がとれていない。ふざけとんのか

293 :デフォルトの名無しさん:2012/01/23(月) 21:15:38.00
環境によって動作が変わる\wとかは最初から使わないようにしてる。仕様変更に弱くなるから。

294 :デフォルトの名無しさん:2012/01/24(火) 07:03:03.76
全然正規じゃないよね

295 :デフォルトの名無しさん:2012/01/24(火) 07:40:13.90
そもそも正規ってどういうこと?

296 :デフォルトの名無しさん:2012/01/24(火) 08:37:06.32
>>295
ttp://hisashim.livejournal.com/219623.html?thread=48871

297 :デフォルトの名無しさん:2012/01/24(火) 09:50:20.13
「正規」って珍訳じゃないか?って人に言ったら、解ってないなと言われいろいろ説明されたことがある。実際どうなの?俺は原典読んでないんだけど。

298 :デフォルトの名無しさん:2012/01/24(火) 10:14:54.95
>296読んで、それを人に説明できるかは難しい

299 :デフォルトの名無しさん:2012/01/24(火) 10:56:19.38
正則集合がわからない人間に説明するのは難しい。
形式言語の3型文法を教えるのが簡単だと思われる。

300 :デフォルトの名無しさん:2012/01/25(水) 11:01:40.52
テキストファイルの中に
foo=bar
という形式で設定値が列挙されています。
grepかegrepだけでfoo=の右辺値のbarを抽出する正規表現はどうなるでしょうか?
(?<=foo=).*
とかやりたいんですけどgrepもegrepもこの式を受け付けてくれません。

301 :デフォルトの名無しさん:2012/01/25(水) 11:16:58.56
grepってパターンにマッチする *行* を表示するプログラムじゃないの?
マッチ部分だけが欲しいならsed使うんじゃなくて?

302 :デフォルトの名無しさん:2012/01/25(水) 11:20:14.85
ちなみにsedなら
sed -n -e '/^foo=/s///p'


303 :デフォルトの名無しさん:2012/01/25(水) 11:24:41.02
なるほど。
?sed -e "s/\(foo=\)\(.*\)/\2/" testfile.txt
で抜き出せました。grepとegrepにこだわっていたのが敗因でした。
ありがとうございました。

304 :デフォルトの名無しさん:2012/01/25(水) 12:57:24.59
余談だがパラメタ展開しないならシングルクォート使うとシンプルになるよ

305 :デフォルトの名無しさん:2012/01/26(木) 03:59:41.24
-oオプションはGNUだけ?
grep -Po '^foo=\K.*' FILE

306 :デフォルトの名無しさん:2012/01/26(木) 09:28:28.27
おお。perlオプションなんてあったんですね。
Pつきなら
(?<=foo=).*
でOKでした。

307 :デフォルトの名無しさん:2012/01/26(木) 12:43:27.44
>>306
\Kが使えるなら、おそらくそっちの方が戻り読みより効率がよい。

308 : ◆x0X2ba5fI. :2012/01/27(金) 19:59:37.19
javascript
同一文字長さ1-5の文字列がある(例:a,aa,..,aaaaa)
これを3回以内の置換で2文字以内の一意の並び(例:0,1,00,01,10)にできる?
出力に元の文字を使うことは可能

309 :デフォルトの名無しさん:2012/01/27(金) 20:30:47.06
書き込む前に意味が通るようによく推敲しろ

310 : ◆x0X2ba5fI. :2012/01/27(金) 20:41:45.68
例示してあるのに意味がわからないなら黙ってた方がいいと思うんだな僕は

311 :デフォルトの名無しさん:2012/01/27(金) 21:31:11.31
aaaaa/ab aaaa/bb aaa/b に置換したならば
a,aa,aaa,aaaa,aaaaa は a,aa,b,bb,ab となり要求を満たす
よって可能

312 :デフォルトの名無しさん:2012/01/27(金) 22:03:06.02
>>311
しかし普通は問題の原文は a,aa,aaa,aaaa,aaaaa ではなくa,aa,aaa,aaaa,aaaaaの
うちどれかの文字列ということになる。

313 :デフォルトの名無しさん :2012/01/27(金) 22:13:46.72
ネットで検索したら、正規表現練習ツール
とかいうのがあるけど、これって練習につかえる?

314 :デフォルトの名無しさん:2012/01/27(金) 22:23:57.71
最終的に何がしたいのかを隠してるから、この質問に対する答えでは
最終的な解決にならない可能性が高い。そして新たなゴミ質問をしてくるという無限ループ。

315 :デフォルトの名無しさん:2012/01/27(金) 22:26:44.18
>>312


316 :デフォルトの名無しさん:2012/01/27(金) 22:36:17.46
\Kなんていう便利な正規表現って一体どこで見つけたの?
何冊か本読んで探してみたけどどこにも書いてない。

317 :デフォルトの名無しさん:2012/01/27(金) 22:41:37.84
>>313
正規表現は使ってナンボだと思う。
実戦こそ学習の場。

318 :デフォルトの名無しさん:2012/01/27(金) 22:59:45.23
>>317
>>313への答えになってないと思うんだ

319 :デフォルトの名無しさん:2012/01/27(金) 23:04:58.86
練習ツールよりも実戦って言ってるみたいだけど…

320 :デフォルトの名無しさん:2012/01/27(金) 23:11:34.35
そんなもん使ってる暇があったら実戦で覚えろって言ってるんだろ
>>317の回答はノーだと思われる

321 :デフォルトの名無しさん:2012/01/27(金) 23:11:50.30
>>316
Perl(とPCRE)の拡張表現だと思う。
pcreのmanpageかperldoc pelre辺り。

322 :デフォルトの名無しさん:2012/01/27(金) 23:23:39.03
\Kみたいなのまでは知らなくてもいいと思うよ。代表的なのさえしっかりおさえておけば大抵なんとかなる。
回答者やるレベルになりたいなら全部知ってないと話にならないけど、ここには話にならない回答者しかいない。

323 :デフォルトの名無しさん:2012/01/27(金) 23:24:46.90
鼻高々(笑)

324 :デフォルトの名無しさん:2012/01/27(金) 23:31:31.52
>>316
ソフトウェア板のサクラエディタふぁんくらぶには
鬼雲やbregonig.dllの作者である>>292の高田さんがよく降臨してるんだけど、
正規表現エンジンが鬼雲になったbregonig.dll V3では
\Kが使えるようになったと去年ステマしに来てた

325 :デフォルトの名無しさん:2012/01/27(金) 23:35:14.63
鬼雲?

326 :デフォルトの名無しさん:2012/01/27(金) 23:38:45.65
正規表現は単独の記号や記号とセットの英字でメタ文字が構成されてるから、
ネットでググれないのが欠点だよね

検索キーワードに記号を受け付けてくれたり、
正規表現でパターンマッチングできる検索サイトはないものか

327 :デフォルトの名無しさん: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の漢字を決めかねていた時期に
いち早く「鬼雲△」とサクラエディタスレに書き込んでいたのは俺な

328 :デフォルトの名無しさん:2012/01/28(土) 00:05:19.62
>>322
頭悪いだろ。

329 :デフォルトの名無しさん:2012/01/28(土) 00:06:35.34
鬼蜘蛛の方がかっこいいのに…

330 :デフォルトの名無しさん:2012/01/28(土) 00:11:02.87
「本人がステマしてた」とかネタでも頭悪そう。言ってる人が

331 :デフォルトの名無しさん:2012/01/28(土) 00:12:25.92
自演がばれたとかじゃないの?
そうでないとつじつまがあわん

332 :デフォルトの名無しさん:2012/01/28(土) 00:17:25.49
ちゃんとリファレンスマニュアル読めよ

333 :デフォルトの名無しさん:2012/01/28(土) 01:11:45.94
クモ嫌いだからやめて。

334 : ◆x0X2ba5fI. :2012/01/28(土) 05:47:46.96
>>311
5と4先に1つずつ始末するのは何故か試してなかった
thx
>>314
単純に「エレガントに一意にしたかっただけ」の話
最終的にそういうことで解決なのですまんが新たなゴミ質問はない

実際に使うシチュエーション

あるサブルーチンを6回回す sr(60);
受け取る引数は1コでそれぞれ10,20,30,40,50,60
そのうち1回はスペース無し確定なので考慮するのは残り5回
引数を元に生成した文字列(特定の文字列+後ろにスペースだけの組み合わせ)が
サブルーチン内で定義する連想配列のキーになる cat["-すべて"+id] = ...

ループ回して連想配列定義するのにそのキーを出来るだけエレガントに一意にしたかっただけ
実際には最終的に出力に影響はないしする必要のないことなので
隠してるとかいう次元の話でもなく良い手があればということで行末に?を付けた

335 :デフォルトの名無しさん:2012/01/28(土) 08:51:28.39
>>333
なるほど、実在する物体はイメージがプラスとは限らないのね。
ネーミング時には気をつけます。

336 :デフォルトの名無しさん: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つの使い道」と言うぐらいなので、
前者の方にもなにか使い道があるのだと思うのですが…。どんな使い道があるのか、理解できません。

よろしくお願いします。

337 :デフォルトの名無しさん:2012/01/28(土) 19:15:03.72
すごいと思うかは人による。文学や芸術でも見方、評価を押しつけるのはよくない。
凄いとか、感動したとか、はおいといて動作の事実をしれば十分。

338 :デフォルトの名無しさん:2012/01/28(土) 19:29:45.46
>>336
思い当たるとしたらこのあたり。
http://codezine.jp/article/detail/1573

339 :デフォルトの名無しさん:2012/01/28(土) 19:41:32.18
>>337
いや、そういうことを言いたいのではなくて・・・。
説明サイトに載っている「A(?=B)(?=B)B」という例は、説明のためだけの、実際には役に立たない例だと思うのですが、
では、「同じ場所にある文字や文字列を複数回見ることが出来る」という特徴の、実用的な使い道(実際に役に立つ例)とは
どのようなものかを知りたいのです。

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

>>338
なるほど! これは確かに、複数回見る場合の例に該当しますね。
こんな使い方もあるのですね。
勉強になりました。どうもありがとうございました。

340 :デフォルトの名無しさん:2012/01/28(土) 21:55:46.15
自分がすごいとおもえる用途を教えてくれって事か。

341 :デフォルトの名無しさん:2012/01/29(日) 07:25:02.38
それがないとできないことがあるという場面を想像すればいいだけなのにね。

342 :デフォルトの名無しさん:2012/01/29(日) 08:06:07.55
ただ動作の事実さえ知っておけば必要になったときに使えるし、必要になるまではどうでもいいものなんだから
「凄いとか、感動したとか、はおいといて動作の事実をしれば十分。」
って言ってるんじゃないの。

343 :デフォルトの名無しさん:2012/01/29(日) 09:06:32.32
A(?=.*1)(?=.*2)

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

A(?=.*1.*2)

2⇒1の順に出てきたらマッチ出来ない。

344 :デフォルトの名無しさん:2012/01/29(日) 09:10:27.66
>>342
どうしてそうなるw

>>339
確かにこの例じゃ「だから?」で終わりだよなー。

345 :336:2012/01/29(日) 10:51:27.62
沢山のレスありがとうございます。

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

実際、これまでANDの検索をしたい時は「A.*B|B.*A」などとやって、面倒だなーと思ってたんですが、今後は
スマートに検索できそうです。

346 :デフォルトの名無しさん:2012/01/29(日) 11:35:36.80
ブログは大半がクズ。いいのもある。
しかし馬鹿に見分けるの困難だから、
定評のある本で勉強することが必要になる。
どんな馬鹿でも時給千円の働きはするのだから、
糞ブログで時間を無駄にするのは馬鹿げてる。


347 :デフォルトの名無しさん:2012/01/29(日) 11:49:15.48
>>345
それがABCDEFGぐらいあると面倒だなーですまなくない?

348 :デフォルトの名無しさん:2012/01/29(日) 13:43:40.77
>>345
そういう分からないとこがあったらどんどん聞いていいですよ。後でそのサイトを読む人の参考になりますし。

>>346
正規表現は敷居が高いから自分に合う本を探すのは大変でしょうね。

349 :デフォルトの名無しさん:2012/01/29(日) 15:57:07.18
検索って地頭が良くないとダメだからな
自分で有効な検索ワードを考えられない人は金払って解決するのがいいと思う

350 :デフォルトの名無しさん:2012/01/29(日) 19:42:55.72
よろしくお願いします。

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

●検索か置換か?
検索

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

具体的にはC言語で
/* から */
#if 0 から #endif にくわえ

#if 0 から #else
に相当するものを追加したい。

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

板違いならすいません。

351 :デフォルトの名無しさん:2012/01/29(日) 19:57:41.89
>>350
無理

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

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

ちょっと前にも書いたけど、上記スレならbregonigの
作者からアドバイスがもらえる可能性もあり


353 :350:2012/01/30(月) 08:08:58.16
>>351,352
ありがとうございます。そちらで聞いてみます

354 :デフォルトの名無しさん:2012/02/02(木) 18:51:05.99
よろしくお願いします。

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

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

●説明
4行以上の書き込みすべてを対象としてNGにしたい

355 :デフォルトの名無しさん:2012/02/02(木) 19:14:34.00
>>354
「NGEx.txtを晒すスレ」

356 :デフォルトの名無しさん:2012/02/02(木) 21:04:35.66
>>355
分からないなら分からないって言おうな

357 :デフォルトの名無しさん:2012/02/02(木) 22:20:24.46
>>354
正規表現使えるの、これ?

358 :デフォルトの名無しさん:2012/02/02(木) 22:57:26.12
「改行が3回以上」で表現できないの?

359 :デフォルトの名無しさん:2012/02/02(木) 23:45:26.86
datにマッチさせるんだっけ
NGWordに正規(含む)で
^(.*<br>){3}
こうか?

360 :354:2012/02/03(金) 00:06:54.59
>>359
無事にできました
ありがとうございました

361 :デフォルトの名無しさん:2012/02/03(金) 03:17:53.42
●正規表現の使用環境
java

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

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

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

AAを削除するスレッドでも質問したのですが良いアドバイスを貰えませんでした。何卒アドバイスを頂けないでしょうか?宜しくお願いします。

362 :デフォルトの名無しさん:2012/02/03(金) 03:29:36.97
>>361
普段使わない文字が含まれてたら除去すればいいじゃん

363 :デフォルトの名無しさん:2012/02/03(金) 03:36:07.18
そのつどAAに使われやすい文字(列)を手動で登録。

364 :デフォルトの名無しさん:2012/02/03(金) 03:38:35.26
>>362
()/%のような記号を一文字表す正規表現ってありますか?
日本語&カタカナ&漢字&英語以外の文字を表す正規表現をかなり調べましたが見つけることができませんでしたorz

365 :デフォルトの名無しさん:2012/02/03(金) 03:41:45.92
>>363
ありがとうございます。完全に除去したいならそうするしかないですよね

366 :デフォルトの名無しさん:2012/02/03(金) 04:05:19.89
()/%があるだけでAAと判定するのか。。
(%)/ まぁ、ウルトラマンといえばそうだが。

367 :デフォルトの名無しさん:2012/02/03(金) 05:04:30.13
>>354がNGあぼーん

368 :デフォルトの名無しさん:2012/02/03(金) 09:39:57.65
お願いします

●正規表現の使用環境
PHP5

●検索か置換か?
置換

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

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

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

●希望する結果
09Aアイウエオ

369 :デフォルトの名無しさん:2012/02/03(金) 09:44:33.13
[^0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙ ゚\\「」,.()\-\/]

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

このようにしてみましたが何も削除されずそのまま表示されます><

371 :デフォルトの名無しさん:2012/02/03(金) 10:12:47.84
>>370
UTF-8にしてみ

372 :デフォルトの名無しさん:2012/02/03(金) 10:33:33.36
>>371
結果
0ガ9ギAグアイウエオ
となりました。
なぜガギグが残るのでしょうか?

373 :デフォルトの名無しさん:2012/02/03(金) 10:35:26.31
失礼・・・
半角のガギグは1文字ではなく別々の文字なんですね
自己解決しました

374 :デフォルトの名無しさん:2012/02/03(金) 11:01:07.21
NGEx.txtを晒すスレ4http://jane.s28.xrea.com/test/read.cgi/bbs/1325934427/l50

375 :デフォルトの名無しさん: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)しかマッチしません。

ほかの正規表現エンジンでは、どのような動作が一般的なんでしょう?
詳しい方いらっしゃいましたら教えてください。

376 :デフォルトの名無しさん:2012/02/04(土) 20:58:37.91
スクリプト言語などで使われているのは
大部分の実装では縦方向探索だから
最長・最短の正確な照合はできない。
縦に探索して枝刈りするからね。

lex/egrepなら方式が違うから確実に最長一致するんだけどね。

377 :デフォルトの名無しさん:2012/02/04(土) 21:01:04.24
あ、んで上の例の場合は正解が複数あるケースだから
どれを返すかはプログラムの作り方で偶然に決まりますん。

378 :デフォルトの名無しさん:2012/02/04(土) 21:02:47.21
>>375
hmjre32.dllの動作はとっても特殊だよ

379 :デフォルトの名無しさん:2012/02/04(土) 21:38:56.03
9文字マッチが正解

380 :デフォルトの名無しさん:2012/02/04(土) 22:00:28.32
>>375
じゃあこれで

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

真ん中を優先する実装があった場合はしらんw

381 :デフォルトの名無しさん:2012/02/04(土) 22:10:09.84
>>380
突っ込み所が多すぎ。
とりあえず、a{11} にマッチするから結果が変わる。

382 :デフォルトの名無しさん:2012/02/04(土) 22:47:38.88
最終的に全長が一番長いパターンが正解
同じ長さで複数の正解がある場合は
もうプログラムの作り方によって偶然決まる。

だから正確さを求める場合は
パターンを書く人が意識して気をつけるしかない。

383 :デフォルトの名無しさん:2012/02/04(土) 23:04:20.27
>>380
「3a+4b (a,b∈N∪{0})」の値域が「0,3,4および6以上」だから確かに結果は異なるようだが、
「空文字列にマッチしないから」なら兎も角、「a{11}にマッチするから」は流石に阿呆すぎ

384 :デフォルトの名無しさん:2012/02/04(土) 23:35:54.40
(?> ) を使えばいいだけでないの。

385 :デフォルトの名無しさん: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文字マッチでした。

最終的に最長のマッチが主流だと思い込んでいたのですが、
失敗さえしなければ、最長のマッチとは限らない、という方が主流っぽいですね。

386 :デフォルトの名無しさん:2012/02/05(日) 05:14:47.51
エンジンの種類によって変わるんじゃないか
バックトラックNFA、POSIX NFA、DFA

387 :381:2012/02/05(日) 07:00:11.53
>>383
> 「空文字列にマッチしないから」なら兎も角、「a{11}にマッチするから」は流石に阿呆すぎ
なぜ阿呆?
面倒だから全部は指摘しなかったけどさ。
「真ん中が優先される」とか「a{6,}を二重に列挙してる」とか。

388 :デフォルトの名無しさん:2012/02/05(日) 15:05:45.09
>>387
11文字にマッチすると何がだめ?

389 :381:2012/02/05(日) 16:09:19.31
>>388
それは俺に聞くことか?

390 :デフォルトの名無しさん:2012/02/05(日) 16:57:29.26
a11文字だった場合は11文字にマッチさせたいのが元だとおもうんだが、
11文字にマッチするようになっちゃうからアウトっていってるように見えたから

391 :デフォルトの名無しさん:2012/02/05(日) 17:19:52.24
greedyとlongestの違いって奴だな。greedyを最長って訳してることが多いので
俺も憶えたてのころはしばらく騙されてたわ。


392 :デフォルトの名無しさん:2012/02/05(日) 18:05:20.70
>>391
hmjre.dllはそのどちらでもないけどな。
|に関してはlongest的な動作をして、
繰り返しに関してはgreedy的な動作をしている(しかもバックトラックが不十分)

393 :381:2012/02/05(日) 20:34:53.75
>>390
> 11文字にマッチするようになっちゃうからアウトっていってるように見えたから
(aaa|aaaa)* は a{11} にマッチしないのだからその認識で合ってるよ。
なぜそういう仕様なのかは俺が知るわけがない。

394 :381:2012/02/05(日) 20:38:29.32
ごめん。a{11} にマッチするな。忘れてくれ…。

395 :デフォルトの名無しさん:2012/02/05(日) 20:52:01.92
>>394
いや、^(aaa|aaaa)*$ のように前後に ^$ 付けたりして11文字にマッチするように強制すればマッチするけど、
そうじゃない場合は11文字にマッチするとは限らないのでは。少なくともPerlとかRubyはそのようだし。

396 :デフォルトの名無しさん:2012/02/05(日) 22:13:58.57
(aaa|aaaa)*で表現される文字列の集合には11文字も含まれるから、マッチする

正規表現でマッチする/しないというのは「ある文字列がパターンで表される文字列の集合に含まれるかどうか」でしょ
>>395の実装の話は「マッチする部分を探す」という処理で、解が複数あるときにどれを選択するかというのが
上で挙がっているgreedyとかlongestとかの話

397 :デフォルトの名無しさん: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]"

よろしくおねがいします

398 :デフォルトの名無しさん:2012/02/06(月) 01:09:18.34
^\[

399 :デフォルトの名無しさん:2012/02/06(月) 01:42:06.59
ありがとうございます。^.\[.で出来ました

400 :388 (!= 383):2012/02/06(月) 06:23:40.38
>>394
ならよかった。なんか見落としてたのかとおもてた

401 :デフォルトの名無しさん:2012/02/06(月) 19:11:03.78
C#スレから誘導されてきました


正規表現で

${aaa}
に一致して、

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

\$\{([^}+)]\}
だと、2つ目のパターンでaaa\r\nを取得してしまいます
宜しくお願いします

402 :デフォルトの名無しさん:2012/02/06(月) 19:18:16.22
中身
.*?

403 :デフォルトの名無しさん:2012/02/06(月) 19:38:05.20
できました!
ありがとうございました!

404 :デフォルトの名無しさん:2012/02/07(火) 00:24:07.47
."*?"は>>401の条件であれば間違っていないです。

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

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

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

//エスケープは分かりやすいように付けてます。

405 :デフォルトの名無しさん:2012/02/07(火) 00:47:40.13
.*?} は非欲張りだから最初の } までしか食べないし
ドットは改行に(通常)マッチしないよ

406 :デフォルトの名無しさん:2012/02/07(火) 21:57:17.17
\$\{([^}+)]\}って括弧の対応おかしくね?

407 :デフォルトの名無しさん:2012/02/08(水) 05:58:46.47
>>404
改行オプションやら仕様変更やらに左右されない正規表現ってことかー、そういう考え方もあるんだ、ふむふむ。

408 :デフォルトの名無しさん:2012/02/08(水) 13:54:48.43
正規表現について詳しい方お答えお願いします。
下の<img から /span>までのソースを正規表現でマッチさせて下のプログラムをうまく動かしたいのですが、
$patternの中にどのような正規表現を書けば良いでしょうか?
正規表現にあまり詳しくないなりに試行錯誤したのですがどうにも動きません。

$matches[2]に2.22を
$matches[3]に3.33%を代入したいのですが、
$matches2[1]にdown_rを

どなたか分る方は居られませんでしょうか?お答えお願い致します。
※できるだけ簡潔なのがありがたいです。
※ソース自体をいじったりせず$patternにどんな正規表現をを代入するか、で教えていただきたいです(あまり詳しくないんでそうしないと分らないと思うので)
※heightやstyleやid等、一定じゃない物はどんな数値に変わっても対応できるようにしたいです。

改行の制限に引っかかってしまったのでソースは下に書き込みます。

409 :デフォルトの名無しさん:2012/02/08(水) 13:55:35.36
408の続き

$getHtml = "<img width="11" height="11" style="margin-right:11px;" border="1" src="http://aa.bb.cc/dd/ee/ff/gg/hh/down_r.gif" alt="ii"> 2.22</span><span id="jj">(3.33%)</span>";

$pattern = "";

if(preg_match($pattern, $getHtml, $matches))
{
   $pattern2 = "/<img.*?(down_r|down_g|up_r|up_g)\.gif/s";

   if(preg_match($pattern2, $matches[1], $matches2))
   {

   }

   if($matches2[1] == "down_r")
   {
      $matches2[1] = "down_g";
   }
   elseif($matches2[1] == "up_g")
   {
      $matches2[1] = "up_r";
   }

   $tmpString = $matches[2]."(".$matches[3].")";

   imageSave($values,$matches2[1],$tmpString,$flag5min);


410 :デフォルトの名無しさん:2012/02/08(水) 14:40:26.03
なんちゃら知恵袋の回答を待ったほうがいいとおもうよ
答えてくれてる人がかわいそう

411 :デフォルトの名無しさん:2012/02/08(水) 15:08:44.54
そんなの、遅い方が悪いだろ・・・

412 :デフォルトの名無しさん:2012/02/08(水) 15:23:49.04
悪いとも思ったのですが、ちょっと急ぎなので、、、

413 :デフォルトの名無しさん:2012/02/08(水) 15:26:52.32
こんな感じか?
.+?>(.+?)<.*?span.*?>(.+?)</span>

414 :デフォルトの名無しさん:2012/02/08(水) 15:28:25.60
そうだぞ、>>412さんは急ぎなんだから遅い奴なんか待ってらんねーんだよ

415 :デフォルトの名無しさん:2012/02/08(水) 15:32:13.91
急ぎとかアンタ以外の人間にとってはどうでもいいことだ
ソースも腐ってるし
業務ですぐ必要だというなら金出してやってもらえばいいことだしな
俺ならタグ解析させるけどな

ソースがゴミに埋もれてるからできないというなら処理する前に掃除すればいいんだよ

416 :デフォルトの名無しさん:2012/02/08(水) 15:33:11.08
業者っぽいなー、正規表現使わなくても出来ることだし時間無いならそうすればいいのに。
仕事をネットに下請けさせんなし。正規表現使わなくても出来ることなんで教える必要なしと判断した。

417 :デフォルトの名無しさん:2012/02/08(水) 15:35:12.94
お前らマルチはスルーするって知ってる?
答えてもらえりゃ何でもいい、腐った奴らなんだから答えなくていいんだよ

418 :デフォルトの名無しさん:2012/02/08(水) 16:02:30.57
>>413

これじゃ無理じゃね?

419 :デフォルトの名無しさん:2012/02/08(水) 16:14:30.48
>>415

なんか嫌な事でもあったのか?

420 :デフォルトの名無しさん:2012/02/08(水) 16:20:22.26
生きてて嬉しいことなんて正規表現が一発で通ったときくらいだよな

421 :412:2012/02/08(水) 16:21:07.70
すいません
こんなに皆さんの気分を害するとは思いませんでした

422 :デフォルトの名無しさん:2012/02/08(水) 16:28:24.36
向こうの返事よりこっちの質問のほうが早いっていうのはマナー的に残念。礼儀は大事だよ。

423 :412:2012/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>";

○○の部分が必要じゃね?あんまり詳しくないから勘だけど


424 :412:2012/02/08(水) 16:49:48.81
途中で切れてしまいました。
すいません。
知り合いから(といっても相談できるような仲じゃないのですが)
423にあるような指摘を頂いたので
一応書かせていただきます。
もし気が向いた方がいらっしゃたら御教授願います。

$getHtml = "<span class="aaa"><span id="bbb"><img width="11" height="11" style="margin-right:11px;" border="1" src="http://aa.bb.cc/dd/ee/ff/gg/hh/down_r.gif" alt="ii"> 2.22</span><span id="jj">(3.33%)</span>";


425 :デフォルトの名無しさん:2012/02/08(水) 16:55:47.85
御教示

426 :デフォルトの名無しさん:2012/02/08(水) 17:17:03.85
あれ、教授も合ってないっけ?

427 :デフォルトの名無しさん:2012/02/08(水) 17:18:54.53
$pattern = "/<span class=\".*?\"><span id=\".*?\">(.*?)>(.*?)</span><span id=\".*?\">\((.*?)\)/s";

・・・じゃ駄目か、・・・駄目だろうなー

428 :デフォルトの名無しさん: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>

429 :デフォルトの名無しさん:2012/02/08(水) 17:33:14.51
>>426
あってる。ただしその場合、
「より親切丁寧にお母さんみたく優しく教えれ」
って意味になる


430 :デフォルトの名無しさん:2012/02/08(水) 17:34:18.98
あはは

431 :デフォルトの名無しさん:2012/02/08(水) 17:38:35.99
>>428

これだと
matches[1]の部分が間違ってないか?

432 :デフォルトの名無しさん:2012/02/08(水) 17:46:16.90
もっと簡潔に書けそうだが

433 :デフォルトの名無しさん:2012/02/08(水) 18:22:20.19
質問です。

ダブルクォーテーション(")に囲まれた文字列を検索する時
\".*?\"で検索できますが、これだと改行が除かれます。
文字列の中に改行を含める場合は、どのように記述すれば良いのでしょうか?


434 :デフォルトの名無しさん:2012/02/08(水) 18:30:12.19
>>432
簡潔と手抜きは違うからな

435 :デフォルトの名無しさん:2012/02/08(水) 18:32:40.11
>>433
ドットに改行を含めるオプション(使用言語ごとに異なる)を使うのがお手軽


436 :デフォルトの名無しさん:2012/02/08(水) 18:32:45.27
>>433
\"[\s\S]*?\"

437 :デフォルトの名無しさん:2012/02/08(水) 19:01:53.83
>>424
自演失敗のフォロー?

438 :デフォルトの名無しさん:2012/02/08(水) 21:34:00.95
>>425-426
師弟がみっちり学問を教える時は「ご教授」も使うらしいが、
一般的な「教えて下さい」の時は「ご教示」を使うのが一般的。

日本語変換がイマイチというより、元の意味を知らずに使ってる人多数。
まるで昔の「独壇場」(正しくは独擅場)

439 :デフォルトの名無しさん:2012/02/08(水) 23:14:23.93
独擅場(どくせんじょう)

440 :デフォルトの名無しさん:2012/02/09(木) 04:17:14.62
>>438
三行目は重言じゃないか?

441 :デフォルトの名無しさん:2012/02/09(木) 05:35:29.17
マルチのゴミクズが湧いてたのか
お前が食いっぱぐれてのたれ死んでも誰も困らないから
急ぎだとかそういう理由でマルチしてんじゃねぇよ池沼

442 :デフォルトの名無しさん:2012/02/09(木) 06:06:08.62
XMLみたいなネストした構造って、
真面目にやろうとすると正規表現じゃ書けないよね。


と思ってたんだが、ちょっとググったら今はできるんだな
鬼車とか一部のエンジン限定だが。

443 :デフォルトの名無しさん:2012/02/09(木) 08:29:51.51
何で環境限定してるんだ?
頭悪そう。

444 :デフォルトの名無しさん:2012/02/09(木) 11:21:05.34
>>443
お前頭悪いってよく言われるだろ

445 :デフォルトの名無しさん:2012/02/09(木) 12:12:33.88
マルチの正規表現何故かうまくいかん
意外と難しいのかこれ?
それともなんか勘違いしちゃってるかなー

446 :デフォルトの名無しさん:2012/02/09(木) 12:31:24.29
まったりいこうぜ

447 :デフォルトの名無しさん:2012/02/09(木) 13:57:18.33
>>445
がんばりなよ

448 :433:2012/02/09(木) 14:17:58.36
>>435,436
レスありがとうございます。

ブランクも検索対象に含めますので、>>436ではできないのでは?

449 :445:2012/02/09(木) 14:44:54.26
できねー!!
後は任せた!

450 :デフォルトの名無しさん:2012/02/09(木) 14:53:31.96
>>427

</span>を<\/span>にしないと
とりあえず駄目だろ

451 :デフォルトの名無しさん:2012/02/09(木) 14:58:02.81
>>449

出来るやつ、今、居ないんじゃね?
俺はわからん

452 :デフォルトの名無しさん:2012/02/09(木) 15:13:48.19
マルチポストはスルーという鉄の掟に従ってるだけ。

453 :デフォルトの名無しさん:2012/02/09(木) 15:26:35.93
頭固いなー

454 :デフォルトの名無しさん:2012/02/09(木) 15:33:38.16
>>423は二重引用符エスケープしてないけどいいのかな

455 :デフォルトの名無しさん:2012/02/09(木) 16:04:26.65
やべえ、思いのほか全然できねえ
イライラしてきた

456 :デフォルトの名無しさん:2012/02/09(木) 18:36:29.49
Twitterにでも書いてろゴミ

457 :デフォルトの名無しさん:2012/02/09(木) 18:44:19.86
正規表現を覚えればいいだけなのになんで人に聞こうとするんだろう。学習能力無いのかな。

458 :デフォルトの名無しさん:2012/02/09(木) 20:01:51.00
●正規表現の使用環境
wxWidets (wxRegEx)

●検索か置換か?
検索

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

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

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

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

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

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

考え方などをおしえてくださいませ。

459 :デフォルトの名無しさん:2012/02/09(木) 20:08:47.09
>>458
よく似た質問をwxWidgetsのスレで見たばかりの気がするが?
ループで回せ。

460 :デフォルトの名無しさん:2012/02/09(木) 21:28:51.69
ループで回して掲示板のURL一覧から一行ずつ書き込んでいったのがこの結果

461 :デフォルトの名無しさん: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←これにヒットしてしまう等、致命的な部分があります。

ご教示いただければ幸いです。


462 :デフォルトの名無しさん:2012/02/09(木) 21:35:47.84
それって正規表現だけでは無理だろ。
割り当てを正確に知る必要がある。
追加で、使う時点で生存しているのか確認するルーチンなども。

463 :デフォルトの名無しさん:2012/02/09(木) 21:39:30.67
最大3桁で三桁あるときの先頭を1,2しか許容しないとかなら
[12]?[0-9]?[0-9]

で検索できるけど、199はいいけど299は許容しないとかまでいくとめんどくさくなるね。

464 :デフォルトの名無しさん:2012/02/09(木) 21:40:19.09
これが無効なIPだという情報はどこから入手した?どれを有効と判定するかで式が変わる。

999.999.999.999

465 :デフォルトの名無しさん: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。

466 :デフォルトの名無しさん: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/

467 :デフォルトの名無しさん:2012/02/09(木) 21:48:32.33
>>455
がんばりなよ

468 :デフォルトの名無しさん:2012/02/09(木) 21:50:03.94
>>462
あ?

469 :デフォルトの名無しさん: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

470 :デフォルトの名無しさん:2012/02/09(木) 21:57:09.78
ある国や地域に割り当てられたとしても、それが実際に割り当てられてるかは判らない。

471 :デフォルトの名無しさん:2012/02/09(木) 22:20:28.58
>>464
IPv4のアドレスは32ビットを8ビットごとに区切ったものだからそりゃ無効だ。

472 :デフォルトの名無しさん:2012/02/09(木) 22:26:41.67
スクリプトと組み合わせた方が早いよ

473 :461:2012/02/09(木) 23:11:29.53
単純に
0.0.0.0 〜 255.255.255.255
の範囲であればIPv4アドレスとして有効と思っていました。

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

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

ご意見、ありがとうございました。

474 :デフォルトの名無しさん:2012/02/09(木) 23:15:22.98
すでに0.0.0.0 〜 255.255.255.255が全て有効だったら
新規の企業や大学はアドレス取得できなくなってるだろ。
枯渇は問題になってるが、満杯でもない。

475 :デフォルトの名無しさん:2012/02/09(木) 23:24:30.10
別に規格上有効かどうかがわかればいいんじゃ……。

476 :デフォルトの名無しさん:2012/02/10(金) 00:31:24.10
>>469
予約済みのIPアドレスは、IPアドレスの形式として有効じゃないって言いたいのか?

>>461って単に
> IPアドレス(xxx.xxx.xxx.xxx IPv4)にヒットさせたい
ってだけだよな。

477 :デフォルトの名無しさん:2012/02/10(金) 00:43:55.70
んーと、getaddrinfoは IPアドレスの数値表記とホスト名両方OKだからさ
正規表現使わずに直接アドレス引けばいいんでないの。
そんでエラー返ればアドレス入力エラー。

478 :デフォルトの名無しさん:2012/02/10(金) 00:50:06.05
(?<1>[012]?[0-5]?[0-5])(?:(?<1>[.][012]?[0-5]?[0-5])){3}
こんな感じではだめでしょうか?

479 :デフォルトの名無しさん:2012/02/10(金) 00:57:44.53
>>459
質問したの私です。
最短マッチの場合、ループ処理で検索するのですね。

ありがとうございました。

480 :デフォルトの名無しさん:2012/02/10(金) 03:45:27.97
>>478
だめすぎじゃね

481 :デフォルトの名無しさん:2012/02/10(金) 03:47:14.37
>>445
鬼車ならjane bbsのreplacestrスレで聞くと正規表現の猛者達が答えてくれる。レベルはんぱねぇよ。

482 :デフォルトの名無しさん: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

483 :デフォルトの名無しさん:2012/02/10(金) 03:53:02.33
マルチのは正規表現使わなくても出来るって言われてんのになんでまだ正規表現でやろうとしてんの。

484 :デフォルトの名無しさん:2012/02/10(金) 08:09:33.72
java用の高速な正規表現ライブラリってありますか?
java.util.regexは遅いし
google RE2を移植してみたもののまるで使いものになりません。

485 :デフォルトの名無しさん:2012/02/10(金) 08:18:35.88
すみません鬼車はネイティブをコールしているので除外でpure javaでお願いします。

486 :433:2012/02/10(金) 08:41:06.95
>>435

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

調べてみたのですが分かりません。
Objective-cで、ドットに改行を含めるオプションは、どのように指定すれば良いのでしょうか?
(「"」で囲まれた改行、スペースを含む文字列を検索する場合)


487 :461:2012/02/10(金) 10:26:45.56
>>478
まったくヒットしなくなりました。出発点よりデグレーションしてます!


488 :デフォルトの名無しさん:2012/02/10(金) 11:12:59.04
>461

これはどう?

●3-6 IP(0以上255以下の整数)を検索
http://www.geocities.jp/oraclesqlpuzzle/regex/regex-3-6.html

489 :デフォルトの名無しさん:2012/02/10(金) 11:29:36.22
>>483

それぞれ事情とかはあるだろ

490 :デフォルトの名無しさん:2012/02/10(金) 11:58:05.30
>>486
どう調べたの

491 :デフォルトの名無しさん:2012/02/10(金) 12:52:06.74
>>490
そんなこと聞いてどうするんだよ

492 :デフォルトの名無しさん:2012/02/10(金) 13:00:57.44
自分で調べるやつはこんなとこに質問しないぞ

493 :デフォルトの名無しさん:2012/02/10(金) 13:40:00.68
[0-5]はどうなのよ?
192.168.0.1 がアウトじゃん

494 :デフォルトの名無しさん: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}

こんなかんじ?

495 :デフォルトの名無しさん: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]\)\.

496 :デフォルトの名無しさん:2012/02/10(金) 15:52:44.88
回答者の能力的にあそこから答えを導きだすのは難しかったのだろう。
その前後のレスにもひどいものがあるが。

497 :デフォルトの名無しさん:2012/02/10(金) 16:22:05.03
ここには正規表現極めたつもりになってる素人がいるからなw

498 :デフォルトの名無しさん:2012/02/10(金) 16:34:35.05
>>494
こういう正規表現一般についての質問ですが、
ターゲットを捕らえることができることは確かめられますが、それ以外のものも捕捉されて
しまうのではないか、という不安はどのように解消すればよいのでしょうか。

499 :デフォルトの名無しさん:2012/02/10(金) 17:00:08.29
>>497

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

お前、答えられないだけだろ、と

500 :デフォルトの名無しさん:2012/02/10(金) 17:13:38.07
>>498
煮たような文字列で試験するしかないね

501 :デフォルトの名無しさん:2012/02/10(金) 17:19:51.30
>>499
自己紹介乙

502 :デフォルトの名無しさん: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を足したいのですが

503 :デフォルトの名無しさん:2012/02/10(金) 17:38:19.38
>>494
(?<1>...)をいっぱい並べて何をやりたいんだ?

504 :デフォルトの名無しさん:2012/02/10(金) 17:45:37.09
>>498
正規表現の本とか読めば書いてあるから読んでね。本に書いてあることを何度も質問されても困るし。
http://d.hatena.ne.jp/hiront_at_nagoya/20081204/1228394426
こんなグラフ作って論理的に考えると意図しない動作はしなくなるよ。もちろん正規表現を使いこなせてればだけどね。

505 :デフォルトの名無しさん:2012/02/10(金) 17:47:56.50
キャプチャをサポートしたエンジンは遷移図の通りには動かない。
その通りに動くのはegrepとかごく一部のみ。

506 :デフォルトの名無しさん:2012/02/10(金) 17:53:01.35
>>502
何をやりたいのかさっぱり分からん。
ソースコードの変換がやりたいのかな?
awkとかLL系の言語使った方がいいんじゃない?
UNIX上ならならシェルスクリプトスレに来い。

507 :デフォルトの名無しさん:2012/02/10(金) 17:54:23.33
>>505
自分で作るんだから意図した通りの動作になるよ。なんでそんなことも知らない人が横から口出すの?

508 :デフォルトの名無しさん: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を足す、これは固定)をしたい

509 :デフォルトの名無しさん:2012/02/10(金) 18:12:54.80
うーん、答えが来ない...
これでもちょっとレベル高すぎたかも?

510 :デフォルトの名無しさん:2012/02/10(金) 18:19:54.24
試しにTwitterで質問レスのURL貼って教えてって流したら20分で回答きた
やっぱりTwitterは早い
2chは遅いから情弱しか使ってないだろうし
情弱が高度情報に回答できないのは当然

511 :デフォルトの名無しさん: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 ),

512 :デフォルトの名無しさん:2012/02/10(金) 18:21:48.51
キチガイがわいたか

513 :デフォルトの名無しさん:2012/02/10(金) 18:22:47.99
結果をはりそこねた

Twitterってそんないいものなのか。始めようかな

514 :デフォルトの名無しさん:2012/02/10(金) 18:33:11.72
まあでも2chみたいに欲しい情報にまつわる話題を扱うスレにフラっと寄って回答を待つようなことはできないけどね。
欲しい情報を手早く得られる環境の構築・維持に手間がかかる。

515 :デフォルトの名無しさん:2012/02/10(金) 18:35:39.46
俺もTwitterやってるけど、始めてすぐには回答なんか全く来なかった。
あれってフォロー・フォロワー増えるまで結構時間が必要。(1か月2か月とか)
ただそれがある程度のラインを超えると便利になる。
だから1度きりの質問なんかだと2chのほうが回答もらえる率は高いけど
今後しばらくプログラミングやって情報交換が必要ならTwitter推奨。

基地害はブロックできるし。

516 :デフォルトの名無しさん:2012/02/10(金) 19:05:23.31
ツイッターは情弱や馬鹿には不向き

517 :デフォルトの名無しさん:2012/02/10(金) 19:17:13.07
馬鹿や情弱には不向きだが利用者の大半は馬鹿と情弱

518 :デフォルトの名無しさん:2012/02/10(金) 21:42:58.05
>>517=馬鹿で情弱

519 :デフォルトの名無しさん: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準拠の正規表現実装であればオプションやフラグ等に関係なく、
"[^"]*"
で改行コードをまたいだ検索ができるはず

520 :デフォルトの名無しさん:2012/02/11(土) 04:32:56.23
さすがPHPer

521 :デフォルトの名無しさん:2012/02/11(土) 21:26:16.26
性器表現

522 :デフォルトの名無しさん:2012/02/11(土) 21:44:24.30
■□■□■□
□■□■□■
■□■□■□
□■□■□■
■□■□■□
□■□■□■

523 :デフォルトの名無しさん:2012/02/11(土) 22:50:46.67
嵐の番組ってCMが生理用品ばっかでワロス

524 :デフォルトの名無しさん:2012/02/12(日) 00:45:38.90
ああ、なるほどなw
言われてみれば生理用品CMに一番適した番組だなw

525 :デフォルトの名無しさん:2012/02/12(日) 01:07:46.56
/[^a-z]/は半角英字以外という意味ですが、
/^[a-z]/ってどんな意味なんですか?


526 :デフォルトの名無しさん:2012/02/12(日) 01:10:22.61
>>525
行頭にa,b,...y,zがある行にヒット。

カッコ外の ^ は行頭の意味。
[^words]はwordsという文字の否定。

527 :デフォルトの名無しさん:2012/02/12(日) 01:13:19.46
>>526
ありがとうございます

528 :デフォルトの名無しさん:2012/02/12(日) 01:55:21.24
さらっと嘘教えるなw


529 :デフォルトの名無しさん:2012/02/12(日) 02:59:09.01
>>528
何が嘘なんだよ

530 :デフォルトの名無しさん:2012/02/12(日) 03:07:42.54
>>1すら読んでないゴミの>>525にまともに答える必要なんかないんだからいいだろ嘘でも

531 :デフォルトの名無しさん:2012/02/12(日) 04:09:57.63
>>525は何で環境書いてないの? 基地害?

532 :デフォルトの名無しさん:2012/02/12(日) 04:55:15.49
>>529
誤解するなんてばかだなぁと思うならまだしも、
どこが誤解されたのか理解できないのはまずいよ


533 :デフォルトの名無しさん:2012/02/12(日) 07:20:37.51
/aac^defg/

534 :デフォルトの名無しさん:2012/02/12(日) 09:22:53.89
/[a-z]^/の^でも行頭という意味になるのか
文字クラスの説明なのにのwordsという単語を角カッコの中に含めるセンス
a,b,...y,zという表記が唐突に出現する(a,b,...,y,zならともかく)

さらっと嘘というツッコミが入らなかったらもうこのスレ開かないところだった

535 :デフォルトの名無しさん:2012/02/12(日) 09:28:08.31
>>534
ああ、まあ誤解を生む表現でごめんね…

そこまで言うならきっちり回答書いてよ('A`)

536 :デフォルトの名無しさん:2012/02/12(日) 10:13:29.42
>>535
こちらもきつく書きすぎた。ごめん
とりあえずこのスレからは卒業するわ

537 :デフォルトの名無しさん:2012/02/12(日) 11:15:37.62
>>529
>>526
>カッコ外の ^ は行頭の意味。
>[^words]はwordsという文字の否定。
w、o、r、d、sという1文字ずつの否定と書かないと
質問者は誤解するでしょ
(上記の正規表現は、Edwords以外にもsordやwやoやrやdやs等にもマッチしない)

ごく希に[^(words)]で2文字以上の文字列の否定ができる正規表現実装もあるらしいけど、
Perl準拠ではない極めて例外的な実装

538 :デフォルトの名無しさん:2012/02/12(日) 11:32:57.78
perl準拠じゃないと例外かよw

539 :デフォルトの名無しさん:2012/02/12(日) 11:42:33.23
PCRE以外はカス

540 :デフォルトの名無しさん:2012/02/12(日) 11:53:23.29
regux「君たち、

541 :デフォルトの名無しさん:2012/02/12(日) 12:01:59.23
>>537
>ごく希に[^(words)]で2文字以上の文字列の否定ができる正規表現実装もあるらしいけど、
そんな変態的なの実在するのか?

542 :デフォルトの名無しさん:2012/02/12(日) 12:08:26.69
環境も書いてないのにレスできるのがすごいわ

543 :デフォルトの名無しさん:2012/02/12(日) 12:41:19.79
>>537
嘘はいいすぎだろ、わかりづらいだけ
しかも、あの時点で嘘の内容を書かなかったら嘘なのか本当なのか判断できなくて迷う奴が必ず出てくる

544 :デフォルトの名無しさん:2012/02/12(日) 13:25:34.35
>>543
>>533

545 :537:2012/02/12(日) 13:30:03.00
同調しただけで私は>>528ではありません

にしてもプログラム板にIDがないのはなぜでしょう
自演で盛り上げる意味のない板だし
無責任な投稿が増えるだけではないかと

546 :デフォルトの名無しさん:2012/02/12(日) 14:11:57.84
特定IDに粘着する池沼がいるからだろ
一度粘着されると24時過ぎるまでつきまとわれる

547 :デフォルトの名無しさん:2012/02/12(日) 14:57:08.09
>>543
>>526も迷ってたね

548 :デフォルトの名無しさん:2012/02/12(日) 15:42:13.98
こんなの初心者用のサイト読んでれば分かってるはずの内容。それを人に聞くことがそもそも間違ってる。
そんな人の相手はしなくていいよ。嘘書くのはまずいと思うけど。

549 :デフォルトの名無しさん:2012/02/12(日) 15:46:51.85
嘘書くのもありだと思うよ。つかむしろ推奨。
ネットで他人に聞けば何でも解決とか思ってる情報乞食のゴミは一回痛い目をみるべき。

550 :デフォルトの名無しさん:2012/02/12(日) 18:10:16.39
よし、情報乞食にウソを教えて痛い目にあわせるサイトをつくろう

551 :デフォルトの名無しさん:2012/02/13(月) 15:30:36.27
>>550
それもありだと思うよ。最近は関連書籍の1冊も買わずにネットで十分とか言うゴミがいるからな。
情報は何でもタダで手に入るのが当たり前と思ってる貧乏人は一度痛い目をみるべき。

552 :デフォルトの名無しさん:2012/02/13(月) 15:32:11.00
>>550
すぐにはバレないけど後々効いてくるような嘘を書くんだぞ。

553 :デフォルトの名無しさん:2012/02/14(火) 01:07:02.10
>>550
サイト読んで学習しようと思うような人はここにバカな質問したりしない。

554 :486:2012/02/14(火) 10:37:31.73
>>519
レスありがとうございます。


555 :デフォルトの名無しさん:2012/02/15(水) 12:57:50.64
性器表現

556 :デフォルトの名無しさん:2012/02/15(水) 16:39:15.39
GUY出

557 :デフォルトの名無しさん:2012/02/15(水) 22:15:15.09
性器をGUYが出してるのか

558 :hidi and peter:2012/02/16(木) 23:00:17.96
(?![BCAA\.md]).*.mdとすると除外されるが
これって、たまたまなので気持ち悪いような気がする
[BCA\.md]でも同じ意味だしな

●正規表現の使用環境
PCRE (a.k.a PHP など 実際はApache)

●検索か置換か?
検索

●説明
特定のファイル名を除外する正規表現を書きたい(とりあえずは1つでいい)

●対象データ
ABCA.md
BCAA.md
CABA.md

●希望する結果

ABCA.md
CABA.md


559 :デフォルトの名無しさん:2012/02/16(木) 23:16:14.43
人に頼む書き方じゃねえな、スルー。

560 :デフォルトの名無しさん:2012/02/17(金) 00:14:04.83
(?!BCAA)[A−Z]{4}¥.md

561 :デフォルトの名無しさん:2012/02/17(金) 03:18:38.64
全角きんもーっ☆

562 :hidi and peter:2012/02/17(金) 21:26:44.99
> 559
知らなかったら、別に書き込まなくてもいいんだぜ。

> 560
ありがとう。'(?!sudo)\w{4}\.md' で、もうちょい便利に使えた。
pcretestで色々と試すと楽しいな。

563 :デフォルトの名無しさん: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>

564 :デフォルトの名無しさん:2012/02/18(土) 00:11:54.50
(<h[2-6][^>]*>)(?!<span>)(.*)(?<!</span>)(</h[2-6][^>]*>)
\1<span>\2</span>\3

565 :デフォルトの名無しさん:2012/02/18(土) 00:46:49.73
>>563
classがある場合「など」もって何よ?
質問する側が仕様をあいまいにするとかありえない

566 :デフォルトの名無しさん:2012/02/18(土) 00:49:05.49
最近質問者につっかかる奴が多いな
同一人物か?

567 :デフォルトの名無しさん:2012/02/18(土) 00:52:55.18
なーいふみたいにとがあてわ
さーわるものみなきずつけたー

568 :デフォルトの名無しさん:2012/02/18(土) 01:09:14.81
つっかかる奴が多いんじゃなくて>>563みたいなゴミが増えたんだろ
曖昧な仕様を提示するとかマジ知能障害

ゴミが増えたらゴミを片付ける奴が増えるのが自然
つっかかる奴を減らしたかったらまず>>563みたいな人間のクズを減らせ

569 :デフォルトの名無しさん:2012/02/18(土) 01:23:46.84
答えてるやつがいるからいいじゃん。なんとかとハサミは使いよう。

570 :デフォルトの名無しさん:2012/02/18(土) 01:28:45.66
>>564
ありがとうございました。

素人丸出しの質問で申し訳ありませんでした。
“など”と書きましたのはidやstyle等のclass以外の属性も考えられると思ったため、
つい曖昧な書き方になってしまいました。

571 :563:2012/02/18(土) 01:30:45.70
メール欄に番号いれるとか、、、
知障と言われても仕方ない。
スレ汚し失礼しました。

572 :デフォルトの名無しさん:2012/02/18(土) 03:01:24.21
いま秀丸エディタで正規表現使って
あれこれ修正しているけど
おすすめの、正規表現を搭載できるエディタってある?
秀丸よりも優れた奴

Eclipseはまた別。すでに使ってるので

573 :デフォルトの名無しさん:2012/02/18(土) 04:27:54.67
正規表現ライブラリを変更できるやつか。
さくらは。

574 :デフォルトの名無しさん:2012/02/18(土) 07:20:52.28
linuxでsed。

575 :デフォルトの名無しさん:2012/02/18(土) 07:24:39.58
鬼車が使えるエディタがあれば最強だろうけど知らないな

576 :デフォルトの名無しさん: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

577 :デフォルトの名無しさん:2012/02/18(土) 10:37:23.75
>>576
高田さん、なんでトリップ使わないの?

578 :デフォルトの名無しさん:2012/02/18(土) 10:44:15.91
>>577
どうして高田さんだと思うの?

579 :デフォルトの名無しさん:2012/02/18(土) 13:45:36.73
秀丸のhmjre.dllで全角スペースをサロゲートペアで検索したいのですがどう書くのでしょうか?

580 :デフォルトの名無しさん:2012/02/18(土) 15:53:38.83
>>579
全角スペースのUnicodeコードポイントは
U+3000だからサロゲートペアじゃないよ

581 :デフォルトの名無しさん:2012/02/18(土) 17:15:43.60
秀丸の正規表現でx0aとか\uxxxxみたいな漢字で全角スペースを書く場合は
どう書けばよいのでしょうか?

582 :デフォルトの名無しさん:2012/02/18(土) 21:50:14.41
>>563
いまさらだけど。
h2 -> h2><span
って置き換えればよかったんじゃ


583 :デフォルトの名無しさん:2012/02/18(土) 22:04:13.43
>>582
>hタグににclassがある場合なども想定されますがそれは引き継ぎたいです。

584 :デフォルトの名無しさん:2012/02/18(土) 22:39:16.21
>>581
秀丸はライセンス持ってないから試せないけど、
\x8140
\x{8140}
\x81\40
\u3000
のどれかでマッチしませんか?

585 :486:2012/02/18(土) 22:43:49.73
>>554
それで上手く行きましたでしょうか?
もしかしたら正規表現よりもC言語やobjectiv-cの言語仕様が優先されて
ダブルクォートをエスケープするか
ダブルクォートを\x22のような16進コード指定すべきだったかもと
今更ながらに気になってます

586 :デフォルトの名無しさん:2012/02/18(土) 23:03:10.90
>>583
ああ、引き継ぎたいってそっちだったのか。てっきり挿入するspanに引き継ぐのかと勘違いしてた。
例も見ずにすまんかった。

587 :デフォルトの名無しさん:2012/02/18(土) 23:07:20.02
>>584
\u{3000}で出来ました!ありがとうございます

最後にこの全角スペースが3000っていう数字になる事はどうやって調べられますか?

588 :デフォルトの名無しさん:2012/02/18(土) 23:34:51.97
>>587
>\u{3000}で出来ました
本当に出来たのか?
この記法は文字クラス内限定のはずだが...

589 :デフォルトの名無しさん:2012/02/18(土) 23:39:09.69
>>587
Windows使ってるならIMEパッドでも見れるし、テキストファイルをバイナリエディタで見てもいいし、
http://www.unicode.org/charts/ に行ってもいい(これを見るならIMEパッドで十分ともいえるけど、本家なので)

590 :デフォルトの名無しさん:2012/02/18(土) 23:51:45.21
>>588
はい、ちゃんと[]野中に書きました

591 :デフォルトの名無しさん:2012/02/18(土) 23:53:32.21
>>590
ありがとうございます

592 :584:2012/02/19(日) 00:14:44.44
>>587
ごめん\x81\40は誤記なので
\x81\x40
でももう1度試してみて

あと秀丸にはステータスバーに、
カーソル位置のコードポイント表示機能があるみたいだよ
(この画面ショット見る限りではU+形式のUnicodeコードポイント表示されるのかはわからないけど)
http://hide.maruo.co.jp/software/hidemaru6/new5.html

593 :デフォルトの名無しさん: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順の範囲指定[ -々]


594 :デフォルトの名無しさん:2012/02/19(日) 00:41:17.26
おっと、]がひとつ余分だった

595 :デフォルトの名無しさん:2012/02/25(土) 16:38:53.37
●正規表現の使用環境
C#

●検索か置換か?
置換

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

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

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

よろしくお願いします

596 :デフォルトの名無しさん:2012/02/25(土) 16:41:10.77
こちらこそよろしくお願いします

597 :デフォルトの名無しさん:2012/02/25(土) 18:16:23.54
.*(りんご20).*
\1

598 :デフォルトの名無しさん:2012/02/26(日) 03:09:03.64
それ複数に対応できてない

599 :デフォルトの名無しさん:2012/02/26(日) 09:59:59.82
複数文字列の否定は(?!りんご20)みたいな否定先読みが
常套手段だけど、今回みたいな否定箇所以外を全置換には対処できないね

>>537のいう文字クラス内での否定文字のグルーピングが
C#(.net framework)の正規表現でも使えれば簡単なんだけどね

600 :デフォルトの名無しさん:2012/02/26(日) 10:25:58.34
>>595
perlの正規表現ならワード境界の¥b使って

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

でいけるけどね。C#はわからん。


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

・・・そういう妥協はだめ?

602 :デフォルトの名無しさん:2012/02/26(日) 14:30:46.84
>>595
これ "りんご=20" と改行以外を削除だよね。
1行辺りの "りんご=20" の数を数えて "りんご=20" をn個並べる処理をforeachすればいいんじゃない?


603 :デフォルトの名無しさん:2012/02/26(日) 17:38:21.92
正直一番簡単なのは
1:りんご20を他で使ってない文字か記号に置換
2:その文字以外全部空文字に置換
3:その文字をりんご20に置換
だと思うよ
なんでも無理に一回で済ますのがいいことなわけじゃないしさ

604 :デフォルトの名無しさん:2012/02/26(日) 17:52:43.21
そもそも、 あおりんご20 の場合はどうなるのだ。

605 :デフォルトの名無しさん:2012/02/26(日) 19:11:05.43
* おおっと *

606 :デフォルトの名無しさん:2012/02/27(月) 18:34:09.00
問い合せフォームから来たメールアドレスを正規表現を用いて抽出したいのですが
秀丸メールを使っておりメール全文をテキスト化したものの中に以下の文章が含まれています

▼メールアドレス
aaaaaaaaaa@aaaaaaaaa.com

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

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

どうか解決策をご教授ください


607 :デフォルトの名無しさん:2012/02/27(月) 18:45:49.84
(?<=^▼メールアドレス$\n)^.*$

608 :デフォルトの名無しさん:2012/02/27(月) 22:49:40.74
>>607
レスありがとうございます

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

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

というエラーが出て思うように動作しませんでした・・・

609 :デフォルトの名無しさん:2012/02/27(月) 23:07:03.41
(?<=^▼メールアドレス)$\n^.*$

改行も引っかかっちゃうけど検索するだけならいいかな

610 :デフォルトの名無しさん:2012/02/28(火) 05:03:46.79
>>609
レスありがとうございます

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

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

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

▼メールアドレス
test@test.com

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

元となる文章はこんな感じです
よろしくお願いします

611 :デフォルトの名無しさん:2012/02/28(火) 06:11:47.05
>>610
秀丸の独自仕様をどこかで見たなあ...と思ったらここだったか
>>197-205あたりの
http://homepage3.nifty.com/kons/hidemaru/helpsite/hidemaru/html/190_CmdSearch_Regular_ReturnCodeLimit.html
を参考にすれば何とかなるんじゃないかな

612 :デフォルトの名無しさん:2012/02/28(火) 09:48:11.08
正規表現使うんなら秀丸はないわ。

613 :607,609:2012/02/28(火) 19:47:54.11
秀丸は環境ないからわからん
詳しい人にまかせた

614 :デフォルトの名無しさん:2012/02/29(水) 00:15:31.04
>>606
検索でいいの? Grepじゃなくて?
検索なら
(?#fulllinematch)(?\1)▼メールアドレス\n(.+)$
で可能。
ただし秀丸メールv5.70以降に限る。っつーか質問時はバージョン書くもんだぜ…

これはもう秀丸の独自仕様の話題なので、もし続きがあるなら秀丸スレへどうぞ。
http://anago.2ch.net/test/read.cgi/software/1315839729/

615 :デフォルトの名無しさん:2012/02/29(水) 00:16:23.90
>>614
こっちだった
http://anago.2ch.net/test/read.cgi/software/1250170096/

616 :デフォルトの名無しさん:2012/02/29(水) 00:18:13.93
>>610
ん、バージョン書いてあったのか…って秀丸エディタ? メールじゃなくて?
エディタ v8.13 なら (?#fulllinematch) 使えるがメールはどうだったかな…
連投スマソ

617 :デフォルトの名無しさん:2012/02/29(水) 00:34:51.64
ここはプログラミング技術の板だから、
プログラミングそのものに関係ないアプリの使い方はアプリ板でやりなよ。
たとえプログラムをエディットするのだとしても。

618 :デフォルトの名無しさん:2012/02/29(水) 02:43:04.02
皆様レスありがとうございます

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

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

確かにプログラムに関係はありませんでした
>>614さんに誘導して頂いたスレでもう一度質問してみます
スレ汚し失礼いたしました

619 :デフォルトの名無しさん:2012/02/29(水) 06:45:09.30
^http://live.nicovideo.jp/watch/(lv[0-9]+)$

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

これってひとつにまとまらない?

620 :デフォルトの名無しさん:2012/02/29(水) 06:47:34.53
まとま

621 :デフォルトの名無しさん:2012/02/29(水) 07:10:20.69
>>619
環境書こうぜ
環境不明だから最大公約数の正規表現
^http:\/\/live\.nicovideo\.jp\/watch\/(lv|co)[0-9]+$

622 :デフォルトの名無しさん:2012/02/29(水) 07:53:10.90
C#のRegexですけど

623 :デフォルトの名無しさん:2012/02/29(水) 21:20:22.34
>>622
後出しは困るんですけど

624 :デフォルトの名無しさん:2012/02/29(水) 21:22:26.28
"^http://live.nicovideo.jp/watch/((lv|co)[0-9]+)"

でいけたです。

625 :デフォルトの名無しさん:2012/02/29(水) 21:53:01.50
やってやるです。

626 :デフォルトの名無しさん:2012/03/01(木) 00:46:21.06
>>624
実害ないけど外側の括弧が無意味な件

627 :デフォルトの名無しさん:2012/03/01(木) 01:00:16.49
>>624
.をエスケープしないとか見てるとイライラする
職場でこういう正規表現見つけたら速攻バグ登録するんだけど、
書いた奴は正常系でテストして問題なかったとか
自分の無知を認めない言い訳ばかり

628 :デフォルトの名無しさん:2012/03/01(木) 01:06:37.19
バグレポートの仕方が悪いんだろ
ちゃんとどういう問題があるか認識させてやれよ

629 :デフォルトの名無しさん:2012/03/01(木) 01:14:56.50
.NETだろ

630 :デフォルトの名無しさん:2012/03/01(木) 01:45:00.45
>>626
外側はURLの可変部分だからいかにも後で参照しそうな箇所じゃないか
そこらへん質問では示されてないけど

631 :デフォルトの名無しさん:2012/03/01(木) 19:16:48.23
>>630
その辺を考えてる人なら?:も使うよ
だからただの余分な括弧だと思う。

632 :デフォルトの名無しさん:2012/03/04(日) 00:15:07.64
質問させてください、環境はWSH(JScript)です
2chのdatファイルは1行目が↓こうなってますが
名前<>メル欄<>日付 ID<> 本文 <>スレタイ 改行
スレタイだけを抜き出すにはどうしたらいいでしょうか?
↓こんなのしか浮かびません…
line = str.replace(/<>(.*?)$/,"$1");

633 :デフォルトの名無しさん:2012/03/04(日) 00:17:53.46
それを実行したらどうなった?

634 :デフォルトの名無しさん:2012/03/04(日) 00:26:17.22
>>633
一行丸々抜き出されました…

635 :デフォルトの名無しさん:2012/03/04(日) 00:53:23.20
これで一応行けました、強引?
title = str.replace(/(?:.*?<>.*?<>.*?<>.*?<>)(.*?)$/,"$1");
もっといい方法あれば教えてください

636 :デフォルトの名無しさん:2012/03/04(日) 01:01:21.24
>>635
^(?:.+?<>){4}(.+)$

637 :デフォルトの名無しさん:2012/03/04(日) 01:12:39.05
>>636
ありがとうございます!

スレタイが空文字はありえないですよね、確かに
ただ、メル欄(名前も?)は空文字がありえるんですよ…

638 :デフォルトの名無しさん:2012/03/04(日) 01:15:23.62
あ、これでいいのか。>>636さんありがとう
^(?:.*?<>){4}(.+)$


639 :デフォルトの名無しさん:2012/03/04(日) 13:39:30.67
ほんと2chまとめ系の質問多いな。

640 :デフォルトの名無しさん:2012/03/04(日) 14:40:56.64
でも2chで業務に関わる正規表現を相談するわけにもいかないし

641 :デフォルトの名無しさん:2012/03/04(日) 18:18:09.44
ただでアフィの手伝いするなんてお人好しだな。

642 :632:2012/03/04(日) 19:46:44.88
あ、一応弁解しとくと私はアフィサイトとかじゃないですよ
気になったスレをhtml変換して保存したいという、正規表現の練習も兼ねた趣味です
誤解があったらすみません
そもそもまとめをJScriptでちまちま変換してる人いるのかな?

643 :デフォルトの名無しさん:2012/03/04(日) 22:03:16.25
そうか、2ちゃんねるまとめサイトか…

644 :デフォルトの名無しさん:2012/03/04(日) 22:26:36.94
>>642
ちまちました変換をしてる人がいるかどうかじゃなく、
その変換のやり方を聞いてくる人に、2chまとめ系がおおいってことだわ。

645 :デフォルトの名無しさん:2012/03/04(日) 22:27:38.98
ついでにいうと、スレタイを取得するために正規表現を使う人は少ないと思う。
正規表現がいいよっていわれたのかもしれないけど。

646 :デフォルトの名無しさん:2012/03/07(水) 16:52:50.44
質問です

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

<a href="mailto:example@example.com">問い合せ</a>

のexample@example.comのみを入れ替えるにはどのような正規表現を使えば出来るでしょうか?

よろしくお願いします



647 :646:2012/03/07(水) 16:54:14.75
ちなみにアドレスはexample@example.com固定とは限りません
よろしくお願いいたします

648 :デフォルトの名無しさん:2012/03/07(水) 18:51:22.57
>>646
メールアドレスであることに拘らなければいいだけの話
mailto:の後ろにメールアドレス以外が来ることなんて普通ないだろ?
とりあえず/"mailto:.+?"/とかでいいんじゃね

649 :デフォルトの名無しさん:2012/03/07(水) 19:19:21.86
>>648
レスありがとうございます
/"mailto:.+?"/とするとmailto:までマッチしてしまうのですが
メールアドレスのみマッチさせるのは不可能でしょうか?

よろしくお願いいたします

650 :デフォルトの名無しさん:2012/03/07(水) 20:52:24.59
簡易的なチェックで良ければ、
「メールアドレス 正規表現」でググれば、例示がいっぱいあるよ。

651 :デフォルトの名無しさん:2012/03/07(水) 22:47:27.20
>>649
>>3
> 【 初心者 】 正規表現 【 入門 】
> http://funcchan.blog16.fc2.com/

652 :デフォルトの名無しさん:2012/03/08(木) 04:02:28.94
>>649
(?<="mailto:)[^"]+
かな

653 :デフォルトの名無しさん:2012/03/08(木) 16:31:53.87
boku@jitakusa-ba.com のboku部分とjitakusa-ba部分を抽出する
正規表現を /(.*)@(.*)/ と書いたのですがちょっとエッチだなと思いました。

654 :デフォルトの名無しさん:2012/03/08(木) 20:00:04.53
>>653
メールアドレスはシンプルな正規表現では書けないんだ!
現実を受け入れろ!

655 :デフォルトの名無しさん:2012/03/08(木) 21:20:12.15
メールアドレスが正しいかどうかはかけないけど、アカウントとドメインを分割するのには>>653である程度大丈夫。
"nanasi@home"@example.com
には対応できないけど、別にいいと思う。

656 :デフォルトの名無しさん:2012/03/08(木) 21:46:59.98
>>653でも最長一致優先探索ならそれは処理できるね。
(.*)@([^@]*)とするとアルゴリズムに関係なくましになるかね。

657 :デフォルトの名無しさん:2012/03/09(金) 00:35:53.46
どうせならこうするのが正解でしょ
([^@]+)@([^@]+)

658 :デフォルトの名無しさん:2012/03/09(金) 00:49:12.02
([^@]+)@([^@]+) <ブヒブヒ

659 :デフォルトの名無しさん:2012/03/09(金) 03:57:50.08
>>657
改悪

660 :デフォルトの名無しさん:2012/03/09(金) 16:01:56.77
>>649
だから、分かんないんだから無理しないで
"mailto:置換前の文字"

"mailto:置換後の文字"
に置き換えれば分かりやすくて確実だろって言ってるの
お前の目的はmailto:の後ろを置換することであって正規表現でメールアドレスに確実にマッチさせることじゃないだろうが

661 :デフォルトの名無しさん:2012/03/10(土) 17:07:42.45
>>660
それは極端だ

662 :デフォルトの名無しさん:2012/03/10(土) 17:48:08.06
そうか?

663 :デフォルトの名無しさん:2012/03/10(土) 21:28:51.98
目的が達成されれば良いわけだから、俺はありだと思うけどな

664 :デフォルトの名無しさん:2012/03/10(土) 21:30:46.34
俺もそう思う。目的と手段を間違えないようにすることは大切だ

665 :デフォルトの名無しさん:2012/03/10(土) 23:02:06.25
「メールアドレスを拾いたい」
のか、
「mailto:○○ を置換したいのか」
の違いでしょ。

>>660の案に自分も一票。

666 :デフォルトの名無しさん:2012/03/10(土) 23:51:43.33
>>664
プログラマと呼ばれる人たちには案外それを間違う人が多い気がする
だが新しい発想てのは稀にそういうとこから生まれたりするから否定はしない

667 :デフォルトの名無しさん:2012/03/11(日) 01:30:19.58
「結果は一緒ですよ?」って言っても「いやいや、ダメだよ」っていう人に職業は関係ない
不慣れな人だからこそ「一緒ならやっといてよ」って感じで無知な押し付けをする人もいる

668 :デフォルトの名無しさん:2012/03/14(水) 17:47:55.35
秀丸エディタのgrep(HMJRE.DLL V1.79)で
"hoge"という単語を検索するときに
'.'に続くもの以外を全て検索したいときの書き方を教えてください。

" hoge" ",hoge" 等は検索したいけど
".hoge"は検索したくありません


669 :デフォルトの名無しさん:2012/03/14(水) 18:13:18.47
否定戻り読みを使う
(?<!\.)hoge
直前に\.が来ないhoge

サポートされてない時は[^.]hoge|^hogeで我慢

670 :デフォルトの名無しさん:2012/03/14(水) 18:18:27.81
>>669
ありがとうございます。上手く行きました。

671 :デフォルトの名無しさん:2012/03/15(木) 03:24:26.09
sedです

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

sedのスクリプトファイルで書いているのですが複数行にまたがるマッチングをこなしてくれません
どうか御教示願います。

672 :デフォルトの名無しさん: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; } }'

673 :デフォルトの名無しさん:2012/03/15(木) 16:56:41.39
>>671
sedスレへ
http://toro.2ch.net/test/read.cgi/unix/1085730992/

674 :デフォルトの名無しさん:2012/03/15(木) 17:32:39.72
perlだが
perl -0777pe "s/((?:\*.*?\n)+)/[\n$1]\n/g"

675 :デフォルトの名無しさん:2012/03/15(木) 17:41:29.31
もっと短くしなさい

676 :デフォルトの名無しさん:2012/03/15(木) 18:06:33.62
>>674
a*hoge

677 :デフォルトの名無しさん:2012/03/15(木) 18:18:06.63
>>676
perl -0777pe "s/((?<!a)(?:\*.*?\n)+)/[\n$1]\n/g"

678 :デフォルトの名無しさん:2012/03/15(木) 18:21:22.40
違うそうじゃない

679 :デフォルトの名無しさん:2012/03/15(木) 18:21:41.49
>>677
foo*hoge

680 :デフォルトの名無しさん:2012/03/15(木) 22:59:16.86
ワンライナーが集団で現れた

681 :デフォルトの名無しさん: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;

682 :デフォルトの名無しさん: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

683 :デフォルトの名無しさん:2012/03/16(金) 01:26:04.67
なんで2回してるの?

684 :デフォルトの名無しさん:2012/03/16(金) 01:32:24.07
あ、そういうことか

685 :デフォルトの名無しさん:2012/03/16(金) 18:26:27.29
Windows PowerShellから.Netのクラスを使用してチカン

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

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

どうしてですか?
"大磯ロングビーチ"ってチカンするにはどうしたらいいのでしょうか


686 :デフォルトの名無しさん:2012/03/16(金) 20:54:07.96
大磯ロングビーチに行って女の子のオパイをモミモミすれば良いよ


タイホ

687 :デフォルトの名無しさん:2012/03/16(金) 22:13:07.37
>大磯ロングビーチ
もう存在しない。

688 :デフォルトの名無しさん:2012/03/16(金) 23:11:23.76
>>685
""で囲んだ文字列は変数展開が有効になってる
抑制したいときは '' を使う(もしくは`)

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

ちゅーか、$v -replace '^会場\[(.+)\]$','$1' でええやん
もしくは[Regex]::Replace($v, '^会場\[(.+)\]$','$1')


689 :デフォルトの名無しさん: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
の部分を抜き出すにはどうすればいい?

数字とかは毎回変わるんだけど

690 :デフォルトの名無しさん:2012/03/20(火) 23:41:40.87
que.innerHTMLで/publish lv8.....f4v が取れるから後は好きなようにする

691 :デフォルトの名無しさん:2012/03/20(火) 23:45:01.69
>>689
>>660

変わらないところはべた書きして「毎回変わる」ところは.+?にでもしとけ
/<que.+?(\/content\/.+?f4v\/)<\/que>/

692 :デフォルトの名無しさん:2012/03/21(水) 07:11:36.55
>>691
それだと可変の文字列内にたまたまf4vの文字列が出てきたらNG
.+で最長マッチにしておくか可変の文字列内に記号(.)が出てこない仕様ならば
/<que.+?(\/content\/.+?\.f4v\/)<\/que>/
の方がよさそう

693 :デフォルトの名無しさん:2012/03/21(水) 07:38:17.77
できました

694 :デフォルトの名無しさん:2012/03/21(水) 12:53:29.40
わざわざqueとか調べなくても/contentから<までをとればいいんでないの

695 :デフォルトの名無しさん:2012/03/24(土) 08:11:28.17
Objective-CのNSRegularExpressionで、
行頭の半角スペース列を置換しようとして@"^ +"と書いたのですが、文字列の最初しか行頭と認識してくれないらしく、
複数行にまたがる文字列の各行頭のスペースが置換できないので、改行文字に続く次のスペースも検出しようとして
@"^ +|\\n +"
と書くと、改行文字も含めて置換してしまうため、マッチ部分をキャプチャする()を使って
@"^( +)|\\n( +)"
としたのですが、
(2147483647,0)という文字列の外の範囲がマッチされてしまい、置換しようとしてエラーとなってしまいます。
文字列途中も含めて、行頭の半角スペース列のみを置換するためにはどのようなパターンを使うのが適切でしょうか?

696 :デフォルトの名無しさん: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フラグを有効化して正規表現を複数行モードで
動作させればうまくいくかも

697 :デフォルトの名無しさん:2012/03/24(土) 10:41:37.22
>>696
ありがとうございます!出来ました。

698 :デフォルトの名無しさん:2012/03/24(土) 10:43:25.54
Comp
http://technet.microsoft.com/ja-jp/library/cc756036(v=ws.10).aspx

699 :デフォルトの名無しさん:2012/03/24(土) 11:34:08.06
半角かっこはencodeして欲しい。
http://technet.microsoft.com/ja-jp/library/cc756036%28v=ws.10%29.aspx


700 :デフォルトの名無しさん:2012/03/25(日) 01:29:15.20
700GET

701 :デフォルトの名無しさん: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は解放されるのでしょうか?

702 :デフォルトの名無しさん:2012/03/25(日) 04:47:56.03
誤爆か

703 :デフォルトの名無しさん: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進かを識別するためにはどのようなパターンを使うのが適切でしょうか?

704 :696:2012/03/25(日) 13:38:44.57
>>703
10進にマッチした時と16進にマッチした時で置換後の文字列を変える目的や
それぞれどんな文字列に置換したいのがわからないと何とも言えません

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

$nの詳細は>>696のリンク先のTable 3 Template Matching Format参照

705 :デフォルトの名無しさん:2012/03/25(日) 14:02:53.15
>>704
ありがとうございます。
10進と16進で処理を変えたいのは、マッチした部分をキーにしてディクショナリから置換後の文字列(というか文字)を取り出すさい、
16進のキーはディクショナリに用意していないので、いったん10進文字列に変換してから同じようにディクショナリにアクセスさせたいためです。(変換メソッドは10進か16進か自動判別してくれないのでここで処理を分ける他ありません。)
$の使い方についてなのですが、キャプチャされた部分を取り出して$表記を用いた別の文字列(template)にキャプチャした部分を埋め込めるというのは分かるのですが
別の文字列のある部分を$〜に置換するのではなくて、$でキャプチャした元の文字列自体を置換したいので、今回使えるかどうかはよくわかりませんでした
いろいろやってみたところrangeがぶっ飛んだ値になるのは、()を|などで分けて2つ以上設定した際に、マッチしなかった()について対応するインデックスのrangeのlocationがNSIntegerの最大値に設定されてしまうらしく
その値で分岐して、locationがNSIntegerMAXではないほうをキーとして取り出し置換することでとりあえず上手くいきました。

706 :デフォルトの名無しさん:2012/03/25(日) 14:54:16.01
[xX]もキャプチャすれば判断できそうだけど。
置換対象はマッチした文字列全体でいいのでは。その環境使ったことないので、もし全体が取れないのなら全体をキャプチャ

707 :696:2012/03/25(日) 15:36:35.36
>>706
マニュアル読む限り、$0でマッチした文字列全体みたい
自分も環境がないので試してはいませんが

708 :デフォルトの名無しさん: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
文字参照じゃなかったよ

709 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 14:51:01.91
(でないかつ\Sを表すにはどうすれば良いのでしょうか?

710 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 15:08:16.83
>>709
(?!()S

711 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 15:12:30.04
[^\s\(]

712 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 15:42:30.15
あぁなるほど盲点でした。\sは\Sでないものですから「AでないかつBでない」という形[^AB]に直せますね。上手く行きました。
いつでも\sに対する\Sが存在するわけではないのではないか、そのような場合
|に対する&のようなものが必要になるのでは([^)] & [\S])と思いましたが、
文字クラスには必ず対する存在があるので必要ない、ということなのでしょう。

713 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 15:42:52.60
>>710,711
御二方レス有難うございました。

714 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 22:44:31.11
正規表現でおk

715 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:03:58.38
広告関係の削除フィルタを書いています。

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

と始まるフィルタがあったのですが、*? の意味が分かりません。
[^>]の0回以上の繰り返し が 0回か1回 ってことですか?

716 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:16:32.79
正規表現の「最短一致」だ
『[探索対象文字]*』だと、条件にマッチする文字列のうちなるべく長いものを取り出そうとする
『[探索対象文字]*?』というふうに、アスタリスクの後ろにハテナをつけると、最短のものを取り出す

717 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:19:53.36
あ、書き忘れたけど、最短一致は
正規表現エンジンによっては未対応のものもある(秀丸とか)のでそこだけ注意

718 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:30:06.16
最短一致に対応してないってどんだけ糞なんだよwww
そんなの正規表現って言わねーよww

719 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:31:07.07
.*? で足りそうなんだけどなんで [^>]*? にしてあるんだろう

720 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:46:41.93
謎が解けました。ありがとうございました。

721 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:58:43.77
>>719
それだと意図しない結果が出ることがある
[^>]*? も不十分ではあるけど、少なくとも .*? よりは src属性値が返ってくる可能性が高い

722 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 19:16:32.20
>>721
ああそうか。<script src="..." />google-analytics.com/ga.jsとかにマッチしたらまずいもんね
どうもありがとう

723 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 20:27:59.87
>>718
grepことglobal regular expression printさんに謝れ

724 :営利利用に関する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

725 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 03:41:10.02
>>718
実に正しい姿だよ。
拡張正規表現がメジャーになりすぎただけで

726 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 09:18:06.54
>>725
これだけメジャーになった今では、そっちが標準。
古来の奴はもはや「機能縮小版」に過ぎない。

727 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 14:10:03.78
正規表現もSQLと同じ道を歩んでいる気もするな。


728 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 14:16:16.81
>>727
こんなスレが役に立つこと自体、困ったことだ。

729 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 11:07:26.03
超初心者質問で申し訳ないのですが、

javascriptで、
ABC|DEF|GHI|JKL 等を検索した時に一致した文字列全てを得る方法はありますか?
更にできればABCとGHIがマッチした場合に、0,2の値が取れれば嬉しいです。

730 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 11:41:09.12
"ABC".match(/(ABC|DEF|GHI|JKL)/);
RegExp.$1; // ABC

731 :営利利用に関する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]

732 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 21:36:39.59
正規表現スレなのにロジックが入るとはこれ如何に

733 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 22:45:26.67
クソみたいなレスしちゃってw

734 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 23:20:22.31
スルーされにくい質問のテンプレと例

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

●検索か置換か?
検索

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

●対象データ
123 123

●希望する結果
123

\d+と書いたら123と123がマッチしますが
123は除外するにはどう書けば良いですか?

735 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 23:26:45.27
意味のない改行はやめてくれ。

736 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 23:35:50.91
>>734
[0-9]+


737 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 00:18:57.65
jane styleで「^^」という顔文字?を弾くにはどうしたらいいでしょうか?
\^\^はダメでした

738 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 00:38:58.69
>>737
\^\^で合ってるはず。レスあぼーんしたいなら、NGExで
NGWord 正規(含む) \^\^

739 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 00:49:12.78
>>737
全角文字も

740 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 02:48:09.08
>>738
>>739
有難うございました

741 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 13:19:47.71
●正規表現の使用環境
PCREライブラリを使用したアプリケーション

●検索か置換か?
置換

●説明
指定範囲内に文字列が含む物を置換したい
(例ではCCCを含むものを検索し対応する括弧に*を加える)

●対象データ
(AACCCDDAABBB)
(AACAABBDBABC)
CDAA(DB(CC)C)(CDD)
C(AA(ABBD)(BCCC)C)

●希望する結果
(*AACCCDDAABBB*)
(AACAABBDBABC)
CDAA(DB(CC)C)(CDD)
C(AA(ABBD)(*BCCC*)C)

742 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 13:25:01.88
説明がおかしかったので訂正
●説明
×指定範囲内に文字列が含む物を置換したい
○括弧内に特定の文字列が有れば対応する括弧を装飾したい

743 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 14:25:38.48
my $str="
(AACCCDDAABBB)
(AACAABBDBABC)
CDAA(DB(CC)C)(CDD)
C(AA(ABBD)(BCCC)C)";

my $re="CCC";
$str =~ s/\(([^()]*?)($re)([^()]*?)\)/(*$1$2$3*)/g;
print $str;

744 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 14:54:40.49
>>743
ありがとうございます!
ちなみにもし範囲指定記号が単一文字では無いケースではどのようになるのでしょうか?
例えば…

745 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/07(土) 14:56:50.48
●正規表現の使用環境
PCREライブラリを使用したアプリケーション

●検索か置換か?
置換

●説明
HTMLタグ形式で括られたテキストで#が二つ以上有るものを検索
もし有れば対応する前方タグ内の後ろに@を付けたい

●対象データ
<AB><CD>nea##kv</CD>nk#eccu</AB>
nea<YY><EF>###v</EF>orarcmm</YY>
<HA>ne#<YY>#</YY>ec#cv</HA>axxzi
<KK>#<CD>asiaev</CD>un##ima</KK>

●希望する結果
<AB><CD@>nea##kv</CD>nk#eccu</AB>
nea<YY><EF@>###v</EF>orarcmm</YY>
<HA>ne#<YY>#</YY>ec#cv</HA>axxzi
<KK@>#<CD>asiaev</CD>un##ima</KK>


746 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/09(月) 13:58:42.73
タグのネストを扱わなければいけない時点で正規表現では無理だろ。

747 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/09(月) 17:25:29.56
>>745
PCREは再帰参照使えるからネストのマッチはできる。
でも、置換するためにタグの名前を保存するのは無理じゃないかな。

あと、最後の例だけ性質が違うんだよね。
>>741の書き方で言えば、
((CCC)CCC(CCC)) → (*(*CCC*)CCC(*CCC*)*)
に対応させる必要がある。>>743ではできないよね。

748 :デフォルトの名無しさん:2012/04/15(日) 03:09:13.15
VB.NETで

http://www.google.com/を含む
http://www.google.com/xxxxxxx

をマッチさせたい時ってどうすればいいでしょうか?
(xxxxxx部分は変動)

If System.Text.RegularExpressions.Regex.IsMatch(TextBox1.Text, "ここに入る正規表現") Then
MsgBox("Google関連サイトだよ")
Else
MsgBox("Googleじゃないよ")
End If

です

例でgoogleを出しているだけでホスト名うんたらは無視してもらって大丈夫です
よろしくお願いします

749 :デフォルトの名無しさん:2012/04/15(日) 03:12:03.83
http://www\.google\.com/.*でいいだろ

750 :デフォルトの名無しさん: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/

でマッチしませんでした

なにか足りない物あるんでしょうか?

751 :デフォルトの名無しさん:2012/04/15(日) 03:24:11.30
http:\/\/www\.google\.com\/.*
じゃあこれ

752 :デフォルトの名無しさん:2012/04/15(日) 03:27:48.05
>>751
出来ました!

ありがとうございます!

753 :デフォルトの名無しさん:2012/04/18(水) 00:38:23.88
123<span>abc</span>def</span>aa

123<span>abc</span>defaa

このようにhtmlタグで閉じられていないタグを削除する正規表現はどのように書けばよいのでしょうか?


754 :デフォルトの名無しさん:2012/04/18(水) 01:43:58.71
無理

755 :デフォルトの名無しさん:2012/04/18(水) 10:31:23.14
それは無理。DOMとかでも、そもそも論理構造が破綻してるやつには無理。

756 :デフォルトの名無しさん:2012/04/18(水) 13:22:14.61
$data = "123<span>abc</span>defaa";
$data =~ s|(</.*?>[^<]*?)</.*?>|$1|g;
print $data;
#=> 123<span>abc</span>defaa

757 :デフォルトの名無しさん:2012/04/18(水) 15:08:40.48
>>756
hoge<span>123<span>abc</span>def</span>aa

758 :デフォルトの名無しさん: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']
];

759 :デフォルトの名無しさん:2012/04/18(水) 16:28:50.29
[/^(http:\/\/www\.forest\.impress\.co\.jp\/docs\/news\/[0-9]_[0-9]\.html)\?ref=rss, '$1']
こうじゃない?

760 :デフォルトの名無しさん: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']

761 :758:2012/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']
/はドジってました。
教えてもらうまで気づかず。
$数字もよくわからなかったんですが、色々分かりやすく説明してもらったので為になりました。

おふたりともどうもありがとうございました。

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

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

を対象にすると

https://twitter.com/

のみしかマッチしません

すべてマッチするようにはどうすればいいのでしょうか?

763 :デフォルトの名無しさん:2012/04/22(日) 12:19:02.09
馬鹿には無理

764 :デフォルトの名無しさん:2012/04/22(日) 12:32:46.72
https?://[^ ]+

765 :デフォルトの名無しさん:2012/04/23(月) 18:40:56.84
以下の解決方法を教えてください。
●正規表現の使用環境
emacs-lisp
●検索か置換か?
検索
●説明
特定の文字列Aにマッチしないが、文字列BorCにはマッチする文字列を検索したい。
初期状態でregexpは↓のようになっており
"-\\(ring\\|history\\)\\'"
文字列末尾に -ring か -history があればマッチしてしまいます。
この状態を維持しつつ特定の文字列を含む文字列であればマッチさせたくない状況を作りたいです。
●対象データ
hogehoge-kill-ring
hugahuga-history
user-hogehoge-kill-ring
user-hugahuga-history
hogehoge-user-kill-ring
hugahuga-user-history
●希望する結果
hogehoge-kill-ring
^
hugahuga-history
^
だけが難しければ最悪↓も含んでしまってOK
hogehoge-user-kill-ring
^
hugahuga-user-history
^
以上よろしくお願いします。


766 :デフォルトの名無しさん:2012/04/23(月) 19:38:29.88
日本語でおk

767 :デフォルトの名無しさん:2012/04/23(月) 20:15:30.90
否定先読み、否定戻り読みで-userつければいいんじゃないかな、、たぶん。

768 :デフォルトの名無しさん:2012/04/23(月) 20:45:35.90
>>765
^((?!user).)*-(ring|history)$

もうちょい素直に説明してくれよ
テンプレのおかげで読み取れるけど説明だけだと意味不明だわw

769 :デフォルトの名無しさん:2012/04/23(月) 21:09:19.59
特定の文字列Aがuserの場合の例、って書いてくれてたら分かりやすかったね

770 :765:2012/04/23(月) 21:09:36.74
>>766
(? )系は使えないようです。regexpエラーになりました

771 :768:2012/04/23(月) 21:15:34.57
emacs-lispは環境ないから検証できないんだよね
分かる人待ち

772 :デフォルトの名無しさん:2012/04/23(月) 21:52:39.92
さっぱりわからんけど、現状の検索にマッチしたあとで、
re-search-backwardってやつでuserを探して、見つからなければおkってすればいいんでない

773 :765:2012/04/23(月) 22:16:02.62
>>772
自分で書くコードならそうしますが、既存パッケージへわたすregexpなので、それができないのです。

774 :デフォルトの名無しさん:2012/04/23(月) 22:26:48.66
emacsenってそういうの改造するのがすきなんだと思ってた。
キーワードがあるけど出来ないなら無理なんじゃない?

775 :デフォルトの名無しさん: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


776 :デフォルトの名無しさん:2012/05/07(月) 23:00:02.41
特定タグの中身だけ対象にしたい奴よくいるけどさー
素直にxpath使えよ捗るぞ

777 :デフォルトの名無しさん:2012/05/08(火) 01:26:56.70
たぶんXML関連の知識知らないって、そういう人は…

778 :デフォルトの名無しさん:2012/05/08(火) 02:20:49.67
>>776
domやxpathが使えない環境なんだよ
そりゃ何を使ってもいい環境ならいくらでもやりようはあるさ
単純に範囲抽出→置換を繰り返せばいいだけだからな

なんていうか正規表現単体でifと同じ効果を持たせるパターンとかあるだろ?(正規表現のデザパタみたいな感じ)
そういう未知のパターンを知ってるミラクルな人が来るのを期待してるのだよ
有るのかどうかわからんがね

779 :デフォルトの名無しさん:2012/05/08(火) 06:29:30.64
使用環境にPCREとしか書かないのが悪い

780 :デフォルトの名無しさん:2012/05/08(火) 07:33:27.77
pcreは先読み後読み迄しかサポートしてないし特定タグ云々は無理っぽい。

781 :デフォルトの名無しさん:2012/05/08(火) 12:07:31.06
>>778
データを<tag>, </tag>でsplitして順番に舐めて置換してjoinする。

782 :デフォルトの名無しさん:2012/05/08(火) 14:38:46.54
>>781
<div>abc<div>abc<div>abc</div>abc</div>abc</div>

783 :デフォルトの名無しさん:2012/05/08(火) 15:53:33.59
検出結果に正規表現で置換掛けろ

784 :デフォルトの名無しさん:2012/05/08(火) 16:09:37.85
>>778
http://swatmac.info/?p=716
> \( ( [^()]++ | (?R) )* \)

頑張ってこれを改良する方向で。

785 :片山博文MZボット ◆0lBZNi.Q7evd :2012/05/08(火) 16:16:35.38
int depth = 0;
文字列を先頭から順番にスキャンする。
"<tag>"が見つかったらdepth++;する。
"</tag>"が見つかったらdepth--;する。
depth != 0のときに"abc"が見つかったらABCに変換する。

786 :デフォルトの名無しさん:2012/05/08(火) 22:24:35.73
\rが30回登場したら30回目より後ろの文字を削除したいんですがどう記述したら良いでしょう。
\rから次の\r間には任意の文字数の文字列があります
言語はパールです

$s =~ s/(((.*?)\r){3})(.*$)//s;
print "$1\n$2\n$3\n$4\n";
これではだめでした


787 :デフォルトの名無しさん:2012/05/08(火) 22:42:32.47
>>786
(\r{30})[\s\S]* を $1 に置換すればいい

788 :デフォルトの名無しさん:2012/05/08(火) 22:42:34.49
その$1にどういう不満があるの?

789 :デフォルトの名無しさん:2012/05/08(火) 22:56:59.32
ためしてないけどこんな感じかな

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

\rは連続して30回じゃないよね?
あとperlでやるなら無理に正規表現使わなくてもいい気がする

790 :デフォルトの名無しさん:2012/05/09(水) 18:50:17.16
>>789
perlの正規表現あんま得意じゃないけど、
30回以下の場合もあるんじゃねとふと思った。
まぁ >>786 に試してもらえばいい話だけど。

791 :デフォルトの名無しさん:2012/05/09(水) 20:00:54.69
>>789
それは>>786の3を30にしただけじゃダメなのかい。
それにしても例として3に減らしていただけだと思うが。

792 :デフォルトの名無しさん:2012/05/09(水) 20:06:48.25
ABCが登場したらその後に登場する全てのDEFをXYZへ置換するにはどうしたらいいのん?

xkdmeABCidkDEFledxaoDEFasdDEF

xkdmeABCidkXYZledxaoXYZasdXYZ


793 :792:2012/05/09(水) 20:12:56.44
色々やってたら解決しました

794 :デフォルトの名無しさん:2012/05/09(水) 20:24:04.29
そのいろいろやった結果を書かんかい('A`)

795 :デフォルトの名無しさん:2012/05/09(水) 21:12:39.59
はっきりしない質問で申し訳ないのですが、どうも正規表現を書くのが苦手らしく
いつも苦労します。emacs-lispでは、M-x himark-regexp でマッチする所が
ハイライトするかどうかで、うまくいってるか確認しながら書くと言う方法に
気がついてから比較的楽になったのですが、この前perlですごく苦労しました。

perlで正規表現書く時、途中まで書いてここまでうまく行ってるとか
楽に確認できる方法ってなんか使ってますか?

796 :デフォルトの名無しさん:2012/05/09(水) 23:44:03.96
>>794
処理を分けたか、肯定戻り読みだと思う

>>795
いったん別のところで作ればどうだろ

797 :デフォルトの名無しさん:2012/05/09(水) 23:58:25.64
>>796
()でくくって$1 とかでprintしながら確かめろって感じですかね、やっぱり。
今度からそうします。


798 :デフォルトの名無しさん:2012/05/10(木) 00:04:23.32
それをすすめていろいろ工夫するのが、いろんな意味で学ぶことは多そうだけどね。
手っ取り早く確かめたいならこういうのとか。
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
他にもいろいろあるけど、ものは使いよう。

799 :デフォルトの名無しさん:2012/05/10(木) 00:06:36.91
老婆心ながら言っておくと、Webサービスを使うときはなにが送信されるかをちゃんと理解してね。

800 :デフォルトの名無しさん:2012/05/10(木) 00:07:36.73
ここまでもuso800

801 :デフォルトの名無しさん:2012/05/10(木) 01:59:46.06
>>792
これ、正規表現で出来なくね?
出来た人がいたら解法plz!

802 :デフォルトの名無しさん:2012/05/10(木) 12:46:39.75
>>801
for文とか使ってマッチしなくなるまで置換してるんじゃね?

803 :デフォルトの名無しさん:2012/05/10(木) 16:39:53.59
unit testで機械的に確認

804 :デフォルトの名無しさん:2012/05/10(木) 21:56:00.80
>>792
(?<=ABC.*?)DEF
だろwwwwとか思ってやってみたら駄目だった件

805 :デフォルトの名無しさん:2012/05/11(金) 10:23:43.36
?<=で可変長対応かつ、最短でも最長でもない、すべてのマッチ長さでマッチしないと出来ないね。

806 :デフォルトの名無しさん:2012/05/11(金) 12:26:10.29
bregonig.dllが使える正規表現チェッカーみたいなものってないのかな?
もしくはperl5.10対応のチェッカー

オンラインのサービスだとレスポンスが遅かったりグループ化の中身を表示してくれなかったりと今ひとつなんだよね…

807 :デフォルトの名無しさん:2012/05/13(日) 23:21:11.61
自作という発想は

808 :デフォルトの名無しさん:2012/05/13(日) 23:57:14.24
正規表現チェッカーみたいなものって?

809 :デフォルトの名無しさん:2012/05/14(月) 02:20:41.79
バリデータじゃね?

810 :デフォルトの名無しさん:2012/05/14(月) 04:01:52.00
正規表現チェッカーでぐぐって出てくるものみたいなものじゃね?

811 :デフォルトの名無しさん:2012/05/14(月) 10:17:43.13
>>806
サクラエディタのようなエディタ系しかないな
でもどれもマッチグループの中身を知る事は出来ない

812 :デフォルトの名無しさん: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版はないかと聞かれてたが、回答はなかった

813 :デフォルトの名無しさん:2012/05/14(月) 18:33:49.61
perlは何でないんだろうな
まぁ大抵の物は先読み後戻り迄で事足りるんだけどね

814 :デフォルトの名無しさん:2012/05/17(木) 23:15:55.05
しばらくずっとプログラミングしてなかったもので、正規表現を忘れてしまったのですが、PHPにて

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

のような文章で、両<a>タグを除去して(apparentlyは残す)、テキストだけにしたいのですが、どのように書けばいいでしょうか?


815 :814:2012/05/17(木) 23:24:20.18
>>812
のリンクで試してみたのですが、

</?a.*>

では<a>...</a>全てがマッチしました
皆さんは何と呼ぶか分かりませんが、ものぐさな処理方法をしないといけないんだと思いますが、どのようにすればいいのでしょうか?


816 :デフォルトの名無しさん:2012/05/17(木) 23:27:09.10
もっと完璧で良い方法が有るけどとりあえず提示された解を弄る方向で

</?a.*?>

コレでいける

817 :814:2012/05/17(木) 23:36:41.09
>>816
ありがとうございます

ちょうど>>812のサイトで今自分も思い出して同じ方法で出来て
$pattern = "</?a.*?>";
$result = 'Japanese system that <a title=" どうやら〜らしい" style="text-decoration: underline"href="javascript:;">apparently</a>';
$results = preg_replace($pattern, '', $result);
var_dump($results);

のようにしたのですが、結果は何故か
Jpnese system tht < title=" どうやら〜らしい" style="text-decortion: underline" href="jvscript:;">pprently<>
となり、aだけが抜けた形になってしまいました
どこが間違っていますでしょうか?

818 :814:2012/05/17(木) 23:39:15.24
バカでした
デリミタを書いていませんでした
久々だったので忘れていました
すみません

819 :デフォルトの名無しさん:2012/05/19(土) 06:42:29.09
半角/全角を区別しない検索ってどうすることが多いんだろう。
それらを区別しないオプションが無い環境かつ、あらかじめ文字列を正規化できないような状況という前提で。

[HH][OO][GG][EE] (フォントによっては分かりにくいけど半角と全角の両方を記述)ってやってるけど
何とかならないもんだろうか。

820 :デフォルトの名無しさん:2012/05/19(土) 06:47:55.19
大星由良助実は大石内蔵助とか。

821 :デフォルトの名無しさん:2012/05/19(土) 11:19:50.88
>>819
それでいいよ

822 :デフォルトの名無しさん:2012/05/19(土) 11:51:15.08
>>821
ですよねー(´・ω・`)
HOGEという文字列から[HH][OO][GG][EE]を生成するような仕組みを作らないとダメか……。

823 :デフォルトの名無しさん:2012/05/19(土) 11:59:38.76
それ作れるのに、あらかじめ文字列を正規化とかは出来ないの?

824 :デフォルトの名無しさん:2012/05/19(土) 13:07:54.74
>>823
ざっくり言うと、マッチ時は全角半角を区別してほしくないけど、
そのマッチ箇所の文字列は、後で全角半角そのままの状態で使うよ、って感じ。


825 :デフォルトの名無しさん:2012/05/19(土) 13:12:23.30
NFKCかけるだけだな

826 :デフォルトの名無しさん:2012/05/19(土) 16:12:14.44
>>824
ああ、なるほど、そういう場合は確かにありそうだね。
理解した、ありがと。

827 :デフォルトの名無しさん:2012/05/20(日) 12:21:17.36
正規化した文字列を作ってマッチして位置を求めてから元の文字列から
取り出すって手もあるね。性能が要求されるところでなければ書くのが
楽な方でいくのもあり。


828 :デフォルトの名無しさん:2012/05/21(月) 18:41:01.43
>>827
ああ、なるほど。
プログラムで関数化するなどの場合は、そっちの方が使いやすいかもしれない

829 :デフォルトの名無しさん:2012/05/21(月) 18:44:36.68
C++のメソッド名にマッチする表現を教えてください。

830 :デフォルトの名無しさん:2012/05/21(月) 19:04:44.50
アホか

831 :デフォルトの名無しさん:2012/05/21(月) 20:44:01.80
\D\w* とかでいける?

832 :デフォルトの名無しさん:2012/05/21(月) 21:53:35.03
>>831
C++を勉強したほうがいいぞ

833 :831:2012/05/21(月) 22:52:32.93
>>832
C++も正規表現も勉強中なのは認めるが、正解を教えてくれ

>>829
というわけで>831は初心者の戯言なのでスルーで

834 :デフォルトの名無しさん:2012/05/21(月) 23:47:24.14
/C\+\+のメソッド名/

835 :デフォルトの名無しさん:2012/05/21(月) 23:53:38.23
\w+でよくね?

836 :デフォルトの名無しさん:2012/05/22(火) 00:21:41.76
お願いします

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

●検索か置換か?
検索

●説明
string内にハングル文字が含まれるかどうかチェックしたいです

837 :デフォルトの名無しさん:2012/05/22(火) 00:23:49.56
[\x{1100}-\x{11f9}\x{3131}-\x{318e}\x{ac00}-\x{d7a3}]

838 :836:2012/05/22(火) 00:45:34.87
>>837
string text = textBox1.Text;
Regex regex = new Regex(@"[\x{1100}-\x{11f9}\x{3131}-\x{318e}\x{ac00}-\x{d7a3}]");
if (regex.IsMatch(text))
MessageBox.Show("true");

で実行すると「16 進数の数字が正しくありません。」とエラーになってしまいます。

839 :デフォルトの名無しさん:2012/05/22(火) 01:20:11.59

なんだこれ?

新手のスクリプトか?

840 :デフォルトの名無しさん:2012/05/22(火) 08:39:43.28
{}いらね

841 :デフォルトの名無しさん:2012/05/22(火) 20:37:55.05
未だに、(?=)という先読みの意味がわかりません。

何を何より先に読むのでしょうか?

842 :デフォルトの名無しさん:2012/05/22(火) 22:18:55.79
評価するよりも先に先を読む

843 :デフォルトの名無しさん:2012/05/22(火) 22:32:11.34
何が、何を評価するよりも、先に読むのですか?

844 :デフォルトの名無しさん:2012/05/22(火) 23:06:03.84
正規表現エンジンが文字列を評価する前に読む
先読みしても「評価する位置(一般的になんて表現するんだ?)」は移動しない

845 :デフォルトの名無しさん:2012/05/23(水) 00:07:47.97
先読みはlook-aheadの翻訳です。
マッチ位置を変更せずに、
文字列のマッチ適合最後部より後ろの方に指定したパターンがあるか調べるのです。

foo(?=bar)bazはfoobazbarにはマッチしますが、
foobazにもfoobarbazにもマッチしません。
foobazでは後方にbarがないし、
forbarbazでは動かないはずのマッチ位置が適合しません。
barfoobazでもダメです。

846 :デフォルトの名無しさん:2012/05/23(水) 00:13:19.93
ご丁寧な解説ありがとうございます。

foo(?=bar)baz

はどのような文字列にマッチするのでしょうか?

847 :デフォルトの名無しさん:2012/05/23(水) 00:13:29.79
foobaz(?=bar)
と書かないのは嫌がらせのため?

848 :デフォルトの名無しさん:2012/05/23(水) 00:37:09.84
>>845
> foo(?=bar)bazはfoobazbarにはマッチしますが、
間違ってる。foo(?=bar)bazはいかなるものにもマッチしない。

849 :デフォルトの名無しさん:2012/05/23(水) 00:39:19.10
>>846
どのような文字列にもマッチしません。
回答スルーして適当な質問を繰り返さないでください。

850 :デフォルトの名無しさん:2012/05/23(水) 00:41:44.40
これで>>849>>845だと衝撃だね

851 :デフォルトの名無しさん:2012/05/23(水) 00:42:56.03
いや、たぶんそうでしょ
原理がわかってないから誰なのかがすぐにわかる

852 :デフォルトの名無しさん:2012/05/23(水) 00:45:54.24
>foo(?=bar)bazはfoobazbarにはマッチしますが、
適当過ぎてワロタw
てか俺の知らないところで仕様が変わったのかと思ってさっきたしかめたわw


853 :デフォルトの名無しさん:2012/05/23(水) 00:51:51.43
生兵法は怪我の元w

854 :デフォルトの名無しさん:2012/05/23(水) 01:14:11.33
生焼けの貝は腹痛の元

855 :デフォルトの名無しさん:2012/05/23(水) 06:41:23.38
否定先読みの方はこんな使い方まで出来ちゃうんだぜ?
(?!^2chmate$)^2ch$

856 :デフォルトの名無しさん:2012/05/23(水) 07:16:10.44
>>855
間違ってねーか?

857 :デフォルトの名無しさん:2012/05/23(水) 12:22:47.94
プログラムから使う場合だと、それこそifを1つ増やすだけで出来ちゃうことも多いから
あんまり使う機会がないんだよなあ。

858 :デフォルトの名無しさん:2012/05/23(水) 12:39:52.88
>>855
間違ってね?

859 :デフォルトの名無しさん:2012/05/24(木) 00:07:54.69
別に間違ってるようには見えないが。

% echo "2ch\n2chmate\n2ch\n2chmate" | grep -Pn '(?!^2chmate$)^2ch$'
1:2ch
3:2ch


860 :デフォルトの名無しさん:2012/05/24(木) 00:27:45.52

windowsのクセにw

861 :デフォルトの名無しさん:2012/05/24(木) 00:45:09.51
>>859
(?!^2chmate$)^2ch$ と ^2ch$ でマッチするものは変わらないので先読みの例として不適切。

862 :デフォルトの名無しさん:2012/05/27(日) 11:22:25.53
以下のように検索と置換をしたいのですが
name0 name1 name2が順番が異なる時どのような正規表現をかけばよいでしょうか

<en_Image name0="image.png" name1="カツ丼" name2="ご飯"></en_Image>
<en_Image name0="image.png" name2="ご飯" name1="カツ丼"></en_Image>
<en_Image name2="ご飯" name1="カツ丼" name0="image.png"></en_Image>
            ↓
<en_Image name="カツ丼ご飯image.png"></en_Image>

name0 name1 name2が順番が異なる時,以下のような正規表現では取り出せますん
pattern="<en_Image.*?name0=\"(\\w+?).*?name1=\"(\\w+?).*?name2=\"(\\w+?)">.*?</en_Image>"
replace="<en_Image name==\"$2$3.$1\"></en_Image>"


863 :デフォルトの名無しさん:2012/05/27(日) 17:05:41.71
>>862
考え方は、先読みを3回やってポインタを動かさずにキャプチャー、後は読み飛ばし。
エスケープ無し、name{0,1,2}が文字列(属性値)内に出現しない、
属性値は2重引用符のみを使用、=の前後に空白なし、で書けば、

<en_Image(?=.*name0="(.*?)")(?=.*name1="(.*?)")(?=.*name2="(.*?)").*?</en_Image>

864 :デフォルトの名無しさん:2012/05/27(日) 17:34:47.11
>>863
先読みの括弧内でさらぬキャプチャの括弧が使えるとは知らなかった
862じゃないけど勉強になったthx

865 :デフォルトの名無しさん:2012/05/27(日) 18:51:50.39
コレ>>863
また俺の知らないうちに仕様が変わったのかと思ってやってみたらやっぱり出来ねぇじゃねぇかw
毎回間違ってる奴は誰だよw

866 :デフォルトの名無しさん:2012/05/27(日) 19:14:05.96
>>863>>865も環境書いてほしいな

867 :デフォルトの名無しさん:2012/05/27(日) 22:12:42.49
他は知らないけど、PCREなら可能だね

ttp://ideone.com/Smpnr

868 :デフォルトの名無しさん: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;


869 :デフォルトの名無しさん:2012/05/27(日) 22:28:34.86
.NETでもできるね

ttp://regex-recipe.frozenlib.net/recipe/105

870 :デフォルトの名無しさん:2012/05/27(日) 22:49:39.65
どうでもいいけど
<en_Image><foo name2="ご飯" name1="カツ丼" name0="image.png"></foo></en_Image>
なんかにも引っかかるようにしてるのはわざとなのか?

871 :デフォルトの名無しさん:2012/05/27(日) 23:19:27.14
>>870
そこまでの厳密さが必要なのかねえ?直すとしたら↓か?
[^<]*?</en_Image>

872 :デフォルトの名無しさん:2012/05/29(火) 03:07:00.30
結局できないと言ってる >>865 の環境は何だったのだろうか


873 :デフォルトの名無しさん:2012/05/29(火) 04:57:16.56
>>865の知らないうちに変わったのって何年も前なんだろうな…

874 :デフォルトの名無しさん:2012/05/29(火) 06:11:54.07
>>870
他にもtestname2="hoge"とかfoobarname1="orz"とかにもヒットするぜい

875 :デフォルトの名無しさん:2012/05/31(木) 15:27:37.03
なんでこのレベルの奴がこの板にいんだよ年々レベル下がってるじゃねーか死ね

876 :デフォルトの名無しさん:2012/05/31(木) 18:02:06.15
食物連鎖の上の人は他のところに行ったよたぶん

877 :デフォルトの名無しさん:2012/05/31(木) 20:52:32.33
>>875
あれ?と思って板名みたらプログラムであって上級プログラムでもスーパープログラマーでもなかったけど
何を期待してるの?

878 :デフォルトの名無しさん:2012/05/31(木) 21:42:38.25
>>875
お前がレベルを上げてくれれば済む話だな

879 :デフォルトの名無しさん:2012/05/31(木) 22:17:24.21
コピペとわかっていてもみんな反応したくなる

ある意味レベル高いな

880 :デフォルトの名無しさん:2012/06/02(土) 02:21:40.60
どうもうまく動かねぇと延々悩んでたら、単に「?」が対応してなかったっていう…

881 :デフォルトの名無しさん:2012/06/02(土) 14:52:01.54
毎回間違ってる奴は>865だったっていう…


882 :デフォルトの名無しさん: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."のような形をとりますので"の直前のピリオドでは改行し、最後の."の"で改行する

のように複雑になってしまいます
どのような正規表現を書けば宜しいのでしょうか?
また、上記を満たすようなコードの書かれているサイトなどあれば紹介していただきたいと思います
宜しくお願い致します

883 :デフォルトの名無しさん:2012/06/03(日) 00:34:36.27
改行されてるやん

884 :デフォルトの名無しさん:2012/06/03(日) 00:51:10.54
>>882 じゃないけど…

> 改行されずに全部1文で取得されてきたとします

885 :デフォルトの名無しさん:2012/06/03(日) 00:53:07.56
改行込みで取り込見直すようにする方向で努力したほうがいいんでないか

886 :デフォルトの名無しさん: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()を後ろに付けても同じようです)としたのですが、
どのように指定すれば改行込みで取り込めるのでしょうか?
上記のやり方だと改行されずに取れてしまいます



887 :デフォルトの名無しさん:2012/06/03(日) 05:27:17.10
それブラウザ依存じゃね?

888 :デフォルトの名無しさん:2012/06/03(日) 06:40:40.77
>>886
<br />
ちゃんと入ってるやん

889 :デフォルトの名無しさん: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.

890 :デフォルトの名無しさん: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";
?>

891 :デフォルトの名無しさん:2012/06/03(日) 13:55:10.06
どうもプログラマ以外の奴がスレに入り込んでいるようだな。
妨害要員でも呼んできたか?w

892 :デフォルトの名無しさん:2012/06/03(日) 14:10:01.68
>>891
> どうもプログラマ以外の奴

自己紹介乙

893 :デフォルトの名無しさん:2012/06/03(日) 14:35:44.26
まあPGじゃなきゃ参加できないわけでもないしな。

894 :デフォルトの名無しさん:2012/06/03(日) 14:48:50.39
ここはム板ですから何もおかしくありません

895 :デフォルトの名無しさん:2012/06/03(日) 20:16:31.83
プログラムが参加してきたのだな

896 :デフォルトの名無しさん: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)?.*?
ではダメみたいなのですがどうするのが正しいでしょうか

897 :デフォルトの名無しさん:2012/06/08(金) 17:10:29.99
間違えました
Dが先に一致して以降BCは一致しないので
ADCBE→3(A、D、Eが一致)
です。

898 :デフォルトの名無しさん:2012/06/08(金) 18:52:44.41
それ、正規表現の仕事じゃないやんw

899 :デフォルトの名無しさん:2012/06/08(金) 18:57:38.92
正規表現でやるには複雑すぎるね
素直にプログラムで書いたほうが早いよ

900 :デフォルトの名無しさん:2012/06/08(金) 19:33:20.07
こんな感じかな?
^[^ABCDE]*(A)?[^BCDE]*(B)?[^CDE]*(C)?[^DE]*(D)?[^E]*(E)?.*$

901 :デフォルトの名無しさん:2012/06/08(金) 20:11:47.73
それがほんとにマッチするかわからんけど
マッチしたとしても1行丸ごとやっちゃうから件数が取れないな

902 :デフォルトの名無しさん: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としたい。
最も多くマッチするマッチングを探そうとすると、やっぱりプログラミングしないとダメっぽいですね・・・。

903 :デフォルトの名無しさん:2012/06/08(金) 20:30:50.96
?

904 :デフォルトの名無しさん:2012/06/09(土) 12:59:29.64
>>901
マッチしますよー。 http://rubular.com/r/50zMFg5OOy
一致した件数(と、その内訳)は$1〜$5の内容を見る。これは質問者の考えたアイデア。
>>902
>最初に最初の文字と最後の文字が来てしまった時点で終わってしまう
これだとって… AEBCD→(A、Eが一致) こういう仕様だったんだから(笑)
何をするにもまず仕様を確定させないといけないね。

905 :デフォルトの名無しさん:2012/06/09(土) 17:13:39.26
>>904
> AEBCD→(A、Eが一致) こういう仕様だった
それどこから持ってきたの?

906 :デフォルトの名無しさん:2012/06/09(土) 18:59:38.75
>>905
>>896>>897からですけど、何か引っかかる点があるの?

907 :デフォルトの名無しさん:2012/06/09(土) 19:41:13.67
>>906
どちらにもないみたいだけど…

908 :デフォルトの名無しさん:2012/06/09(土) 19:56:46.83
えーと、論点をハッキリさせてくれないと困るな。
AEBCD→(A、Eが一致)
>>896>>897を見て、これ以外の解釈があるってことかな。
そうならば、具体的にそれを示してくれないと。

909 :デフォルトの名無しさん:2012/06/09(土) 20:26:20.59
「最長でマッチしてくれ」っていってるんじゃない?
AEBCD->ABCD

910 :デフォルトの名無しさん:2012/06/09(土) 20:32:28.31
>>908
その事例は書いてないし、>896の下記事例と矛盾する。
> AFGHBCDE→5(全件一致)
まあ、要件をちゃんと言葉で説明出来てない質問者も悪いと思うけどね。

911 :デフォルトの名無しさん:2012/06/09(土) 20:56:57.62
な、なんか狐につつまれたような気がする…。(AA略

912 :デフォルトの名無しさん:2012/06/09(土) 21:15:24.74
>>909
>>896>>897に「最長でマッチしてくれ」という内容は無いです。
最長でマッチさせたいという要求は>>902で初めて出たものですね。

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

>>910
いや、そこは矛盾してないですよ。
例題の対象はABCDEだけなので、FGHは「余計な文字」となります。

913 :デフォルトの名無しさん: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が一致)
となります。

914 :デフォルトの名無しさん: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>の結果がハッキリと異なれば、ルールを確定できましたね。

915 :デフォルトの名無しさん:2012/06/09(土) 22:22:12.91
そう、もともと最長一致にすべきかどうか判断できる例が載っていなかったんだ。
だから勝手にAEBCD→(A、Eが一致)なんて決めてはいけないんだよ

916 :デフォルトの名無しさん:2012/06/09(土) 22:25:17.78
DACB
このときどうするかがわかればそれでよくね。

917 :デフォルトの名無しさん:2012/06/09(土) 22:29:39.31
元の例から、AEBCDのとき、ABCDをとってはいけなくなる根拠を出さないとな。

ABCDととればいいはずなのに、気を利かせてAEにするのは無理がある、とも言い換えられる状態。

918 :デフォルトの名無しさん:2012/06/09(土) 22:32:09.03
>>912-914
例題不足と最短一致と確定することに矛盾はないの?

919 :デフォルトの名無しさん:2012/06/09(土) 23:40:50.88
>>915>>917
なるほど、それならその通りですね。
例題だけで判断すれば、どちらともつかないから決めつけられない。

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

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

>>916
一応ABCDE5文字が対象なので…。
>>918
ん?勘違いなさってる。
最短一致じゃないですし、>>912-914は、細かく言えば確定できていない、ということを示しました。

920 :デフォルトの名無しさん:2012/06/10(日) 16:43:55.84
> それを普通に考えると、<C>よりは<A>に分がありますよね。
これを受け入れたとして、
> AEBCD→(A、Eが一致) こういう仕様だったんだから(笑)
こうまで言い切れる理由にはならんだろ

921 :デフォルトの名無しさん:2012/06/12(火) 19:47:27.69
●正規表現の使用環境
鬼車

●検索か置換か?
検索

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

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

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

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

>>922に続く

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

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

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

調べた感じですと、否定文を使う形になるとは思いますが、否定文が結構複雑そうで、
それに複数の否定を加えるようだとかなり難しいように感じますが、実際にこのような正規表現を実現出来るか不安なのですが、実現可能でしょうか。
また、もし上記を満たす正規表現が分かる方おりましたら教えて頂ければ幸いです。
どうぞよろしくお願い致します。

923 :デフォルトの名無しさん:2012/06/12(火) 21:09:05.98
>>921-922
(あああ|いいい|ううう)(?!きき|くく)+?$

924 :デフォルトの名無しさん:2012/06/12(火) 22:44:31.65
>>923
ありがとうございます。
自分の環境だと、うまく動かず+?$を外して
(あああ|いいい|ううう)(?!きき|くく)でうまく動きました。
後述で補足となりますが、大変申し訳ありません・・・言葉足らず、条件抜けとなってしまいました。。

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

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


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

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


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

上記のあああの部分だけマッチさせたいのですが、これは可能でしょうか。
もしお分かりの方おりましたら再度となってしまい申し訳ありませんが教えて頂けないでしょうか。
後出し条件と言葉抜けとなってしまい大変申し訳ございませんでした。

925 :デフォルトの名無しさん:2012/06/13(水) 00:24:06.44
>>924
ごめんそんな気はしてたけど考えるの面倒だった。
これでどうかな。
^(?!.*(きき|くく))(?=.*(あああ|いいい|ううう)).*$

926 :デフォルトの名無しさん:2012/06/13(水) 00:32:40.79
>>925
おおお、うまく動作致しました!感動で鳥肌です。。
説明不足で申し訳ありませんでした、再度お答え下さってありがとうございます!
本当にありがとうございます!
正規表現使う場面も多いので勉強してきます。

927 :デフォルトの名無しさん:2012/06/15(金) 13:01:14.62
変換のtrを使わず置換で

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

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

s/[a-z]/\U$&/g
としてもダメだった…

928 :デフォルトの名無しさん:2012/06/15(金) 13:10:40.09
sed -e 'y/abchigedjfklmnopqrstuvwxyz/ABCHIGEDJFKLMNOPQRSTUVWXYZ/'

929 :デフォルトの名無しさん:2012/06/15(金) 13:18:46.06
s/[a-z]/\u$&/g; 
おしかったね

930 :デフォルトの名無しさん:2012/06/18(月) 13:13:11.82
((角|丸)ゴシック|明朝)

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

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

こういうのも同様ですね

931 :デフォルトの名無しさん:2012/06/18(月) 13:22:26.75
丸)のところをエスケープしてみれば?

932 :デフォルトの名無しさん:2012/06/18(月) 13:28:15.85
>>930
((?:角|丸)ゴシック|明朝)
こういうこと?

933 :デフォルトの名無しさん:2012/06/18(月) 13:44:22.97
>>930
「丸」にマッチする? 環境は?
egrepではマッチしないんだが。

934 :デフォルトの名無しさん:2012/06/18(月) 13:47:56.70
((角|丸)(ゴシック|明朝))


935 :デフォルトの名無しさん:2012/06/18(月) 13:53:22.06
>>934
それでは「丸明朝」にマッチすると思うが。

936 :デフォルトの名無しさん:2012/06/18(月) 14:01:16.97
角ゴシック|丸ゴシック|明朝 なんだから
((角|丸)ゴシック)|明朝

937 :デフォルトの名無しさん:2012/06/18(月) 14:20:10.56
え?

938 :デフォルトの名無しさん:2012/06/18(月) 14:52:52.24
どんどん酷くなってる件w

939 :デフォルトの名無しさん:2012/06/18(月) 15:41:47.11
>>930
> 丸にもマッチします

$ printf 'A\nB\nC\nD\n' | egrep '((A|B)C|D)'
D

940 :デフォルトの名無しさん:2012/06/18(月) 16:35:20.34
本題と関係ないけど、egrepではなく、grep -eを使った方が好き。

941 :デフォルトの名無しさん:2012/06/18(月) 16:46:31.29
誰が質問者で条件がどーなのかさっぱりw
質問かどうかもあやしい

942 :デフォルトの名無しさん:2012/06/18(月) 19:11:40.07
「角ゴシック、丸ゴシック、明朝」にマッチして
「角、丸」にマッチしなければいいんだろ

だったら
([丸角]ゴシック|明朝)
でいいんじゃね?

943 :デフォルトの名無しさん:2012/06/18(月) 19:41:14.84
マルチバイト文字に対応してればそれでいいかもね

944 :デフォルトの名無しさん:2012/06/18(月) 20:00:36.46
>>942
ちゃんと嫁って、もう一例書いてあるだろ
(i(Phone|Pad|OS)|Android)

945 :デフォルトの名無しさん:2012/06/18(月) 20:20:02.76
(iPhoge|Android)


946 :デフォルトの名無しさん:2012/06/18(月) 20:44:29.06
>>944
よく読んでも、そっちについてはどういう不都合があるのか書いてないように見えるけど?

947 :デフォルトの名無しさん:2012/06/18(月) 21:09:59.13
((角|丸)ゴシック|明朝)の場合は942が書いてるように[]で括ればいいと思う
何故なら文字が単独だから、んで下の例では[]は使えない
故に(iPhone|iPad|iOS)|Android)を(i(Phone|Pad|OS)|Android) こうすれば効率的と判断したからでは?


948 :デフォルトの名無しさん:2012/06/18(月) 21:49:34.97
iPodに対応してないぞ

949 :デフォルトの名無しさん:2012/06/19(火) 09:08:19.93
(i(Phone|P[ao]d|OS)|Android)

950 :デフォルトの名無しさん:2012/06/19(火) 11:11:50.61
角明朝
丸明朝

の「明朝」にマッチしていいのか悪いのか?
それ以前に>>930の「丸にもマッチします」とは何なのか?

951 :デフォルトの名無しさん:2012/06/19(火) 20:02:49.25
久々に言っとくか

質問者はテンプレ(>>5)使え

952 :その@:2012/06/20(水) 18:31:30.82
正規表現について質問です。

↓こーいう文字列に対してC#で正規表現を掛けようと思っています。(実際には改行コードは含まれていません。)

<li class="g"><div class="vsc" sig="jNt" bved="0CDUQkQo" pved="0CDQQkgowBQ">
<h3 class="r"><a class="l" onmousedown="return rwt(this,'','','','6',
'AFQjCNE3acQNFxBDQ4S2wYC0wVeDKQSSjQ','',
'0CKUBEBYwBQ',null,event)" href="http://www.jpa.or.jp/chishiki/index.html"><em>たまご</em>
の知識</a></h3><div class="vspib" role="button" tabIndex="0" aria-label="結果の詳細">
<div class="vspii"><div class="vspiic"></div></div></div><div class="s">
<div class="f kv"><cite>www.jpa.or.jp/chishiki/index.html</cite><span class="gl">


953 :そのA:2012/06/20(水) 18:32:05.39
- <a onmousedown="return rwt(this,'','','','6','AFQjCNFdsuuoe_u5WYesXSqMlVLQ9T5KuA','','0CDcQIDAF',null,event)" href="http://webcache.googleusercontent.com/search?q=cache:wVOdEgj0slAJ:www.jpa.or.
jp/chishiki/index.html+&cd=6&hl=ja&ct=clnk&gl=jp">キャッシュ
</a></span><span class="vshid"><a href="/search?hl=ja&q=related:www.jpa.or.jp/
chishiki/index.html+%E5%8D%B5&tbo=1&sa=X&ei=sZXhT6-XJobjmAWxq53xAw&ved=0CDgQHzAF">
類似ページ</a></span></div><div style="display: none;" id="poS5" class="esc slp">一般公開で +1 しました 
<a class="fl" href="#">取り消す</a></div><span class="st"><em>
卵</em>は私たちの食生活に欠かすことのできないほど身近なものです。それだけに、
「実は知らなかった!」ということも多いのではないでしょうか? このページでは、
<em>卵</em>についてのいろいろな知識を紹介しています。
興味をもった項目をクリックして、<em>卵</em>への理解を <b>...</b>
<br></span></div></div></li>


※メッセージが長すぎます、と怒られちゃうので分割して投稿しています。

954 :そのB:2012/06/20(水) 18:34:34.61
そして、     http://www.jpa.or.jp/chishiki/index.html    というURLを抜き出す為に


// string wk = ごにょごにょした上記のHTMLが含まれています。

System.Text.RegularExpressions.MatchCollection mc2 =
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[A-Za-z0-9_\.\/].*?)""><em>.*");

foreach (System.Text.RegularExpressions.Match m2 in mc2)
{
string s = m2.Groups["url"].Value;

}

というコードを実行すると …続く

955 :そのC:2012/06/20(水) 18:37:11.79
↓の部分で正規表現でヒットしちゃいます。
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

956 :デフォルトの名無しさん:2012/06/20(水) 18:37:29.01
ちょwww

957 :デフォルトの名無しさん:2012/06/20(水) 18:50:38.34
もうちょっと整理しろよ
長々と書くならコピペだけで動くコードにして、コード貼るサイトに書いてくれ。

958 :デフォルトの名無しさん:2012/06/20(水) 18:55:32.97
結局、
null,event)" href="[URL]"><em>
の[URL]部分だけ取り出したいのに、うまくいかないということか?

959 :デフォルトの名無しさん:2012/06/20(水) 19:00:23.64
ざっと見た感じ
(?<url>[A-Za-z0-9_\.\/].*?)
の後ろのピリオドが邪魔じゃね?
パラメータいらないなら、:だけ追加して
(?<url>[A-Za-z0-9_\.\/:]*?)
こうとか?

960 :デフォルトの名無しさん: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
やってみますです。

961 :デフォルトの名無しさん:2012/06/20(水) 19:53:51.26
>>960
http://pastebin.com/

どこまでマッチさせたいのかよく分からないけど、
href="〜" ならば、意味合い的にコアの部分は href=""(?<url>[^""]*)""
とかで十分では。

962 :デフォルトの名無しさん:2012/06/20(水) 20:10:12.39
>>960
コード貼るサイトあるんだよ。
質問スレのテンプレ探してみ。

963 :デフォルトの名無しさん:2012/06/20(水) 20:11:25.52
>>961
ありがとうございます。 "" を含まないという意味ですよね。
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)""><em>.*");
でやってみたところそれらしいそれらしい値は取れる様になりました。

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



964 :963:2012/06/20(水) 20:32:55.97
>>962
ありがとうございます。便利なサイトがあるものですね。


↓の正規表現を書いていたのですが、
System.Text.RegularExpressions.Regex.Matches(wk, @".*,null,event\)"" href=""(?<url>[^""]*)""><em>.*");

この正規表現の場合、(A)の場合は取得出来るのですが、
(B)の場合に取得が出来ません。(B)の場合でも取得出来るにはどういう条件を追加すれば良いでしょうか?

(A) BYwBw',null,event)" href="http://www.nichirankyo1.or.jp/"><em>卵1</em>
(B) BYwBw',null,event)" href="http://www.nichirankyo2.or.jp/">日本<em>卵2</em>


965 :デフォルトの名無しさん: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*を入れるのがセオリー。

966 :デフォルトの名無しさん:2012/06/20(水) 21:19:32.12
>>965
ありがとうございます。出来ました!!!セオリーもありがとうございます。

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

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

で良いでしょうか?


967 :デフォルトの名無しさん:2012/06/20(水) 21:21:06.17
因みに

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

のサイトよく纏められていておすすめです。

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

くどいようですが、まず最初に「確実に確定できるマッチ範囲」をしっかり決めた方が吉です。

969 :デフォルトの名無しさん:2012/06/20(水) 21:43:39.52
ありがとうございます。修行します。

970 :デフォルトの名無しさん:2012/06/20(水) 21:52:46.74
返されるデータを正規表現だけで全て抽出しようと試みてましたが
結構厳しそうです。


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

地道に文字列操作します。

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

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

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

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

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

以下省略
http://www.afpbb.com/article/economy/2885046/9141540

972 :uy:2012/06/22(金) 14:33:13.43
進化しないよね、正規表現
機能が足り無すぎ

973 :デフォルトの名無しさん:2012/06/22(金) 14:39:10.52
(?R) とかあるじゃん。

974 :デフォルトの名無しさん:2012/06/22(金) 15:05:56.77
>>972
^
$
(|)
[]
n
\

これで十分です

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

正規表現って何年前に作られたもので何年間ろくに成長せずに止まってるんだよっていう
正規表現内にシンタックスシュガー入れないからいつまでたっても正規表現は見にくい
人間が書ける範囲を狭める

976 :デフォルトの名無しさん:2012/06/22(金) 17:50:07.85
>>975
そう思うなら君が新たなる次世代型正規表現とやらを作ったらいかがかね?

977 :デフォルトの名無しさん:2012/06/22(金) 17:50:32.52
>>972-975
さすがにこれは「お前らがそう思うんなら(ry」としか言いようがない
こちとらPerlとかRubyの最新版のマニュアル見てたら
\gだの\kだの\pだの今まで知らなかった拡張記法があって脳汁が溢れそうなんだがw

俺はuyのように全てを知り尽くしたわけじゃないから、
今後もこういった発見で楽しい思いをさせてもらうよ

978 :デフォルトの名無しさん:2012/06/22(金) 18:28:04.49
>>975
シンタックスシュガーがほしいだけなの?
シンタックスシュガーがあれば人間がかける範囲が広がると思うのはちょっとどうかと

979 :デフォルトの名無しさん:2012/06/22(金) 18:28:35.50
正規表現はマスターすれば
バリデーションチェックとか速そうですね。


正規表現を考える時間に
文字列操作でバリデーションを作成した方が早かったりするので悩みますねん。

980 :デフォルトの名無しさん:2012/06/22(金) 18:31:13.81
時間あるときに考えて、作って、速度比較してみたらいいよ。
たぶん今作ってるほうが速いよ

981 :デフォルトの名無しさん:2012/06/22(金) 18:46:57.01
使えない人ってなぜか使わなくてよい理由を探して口にださないと済まないみたいだ。


982 :デフォルトの名無しさん:2012/06/22(金) 19:09:34.29
ちょっと複雑になると途端に見にくくなるとか、プログラム側で分岐させるだけでスッキリする場合とか、
確かにそういうところがあるのは否定出来ない。

そういえば否定もちょっとめんどい。


983 :デフォルトの名無しさん:2012/06/22(金) 19:10:24.04
>>981
でもある言語の同じレベルのプログラマ達の中で、使える人と使えない人が
くっきり分かれてしまうのは問題だと思いませんか。

984 :デフォルトの名無しさん:2012/06/22(金) 19:20:32.46
>>980
物にもよるかと思いますが
プログラムでロジックを組んだ方が開発時間が短縮出来る気がしてます。

985 :デフォルトの名無しさん:2012/06/22(金) 19:47:48.43
確かに誰でも使いやすい道具になるのは正しいこと。
俺だって昔はなんだこりゃと思った時期もあったし、
それを忘れてこんなの出来ないのかよと言うのはただの傲慢かと思う。

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

>>982
否定は誰かが構文作ってくれるに違いない。あれは人がやる仕事じゃない。

986 :uy:2012/06/22(金) 20:05:54.52
>>978
そこからか?
アセンブラで作れる範囲のプログラムと
C#で作れる範囲のプログラム
理論上は作れるとかいうボケいらないよ?

987 :uy:2012/06/22(金) 21:59:25.71

str = "12345678"
str.scan(/\d{1,3}/) {|m| p m }

"123" "456" "78"
と表示されるけどこれを
"12" "345" "678"
にしたんだけどどうやんの??

988 :デフォルトの名無しさん:2012/06/22(金) 22:13:33.43
>>984
うん、ものによるのは確かにそうで、ある程度複雑になった場合は、
正規表現のほうが明快かつ速度も優れる場合があると思う。
逆に、ある程度単純な場合は正規表現を使わないほうが速いことが多い。

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

>>986
C#がアセンブラのシンタックスシュガーであるという大ボケを見せてくれてるの?

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

おい

アセンブラで3Dゲー作れ

990 :デフォルトの名無しさん:2012/06/22(金) 22:26:35.29
>>989
その前に答えてよ。
C#ってアセンブラのシンタックスシュガーなの?

991 :uy:2012/06/22(金) 23:21:59.97


>>990


なんだ



ただのバカか






992 :デフォルトの名無しさん:2012/06/22(金) 23:41:10.23
(?:.*\n{2}).*
の書き込みをする人にイラッ☆

993 :デフォルトの名無しさん:2012/06/22(金) 23:46:47.51
>>987
reverseしておいてそれやって、reverse

994 :デフォルトの名無しさん:2012/06/23(土) 00:19:27.72
>>991
恥ずかしくなったの?改行多いよ

995 :デフォルトの名無しさん:2012/06/23(土) 00:25:43.93
ふつう、言語そのものを、低水準言語のシンタックスシュガーとは言わないような。

996 :デフォルトの名無しさん:2012/06/23(土) 01:00:58.28
でかい釣り針だな…
とりあえずおまいら全員Perl6の正規表現を読んで失禁してくればいいと思うよ
http://feather.perl6.nl/syn/S05.html

997 :デフォルトの名無しさん:2012/06/23(土) 01:15:14.82
ラクダ本4版の正規表現の章は100ページ近くあって軽くひきつけを起こした

998 :uy ◆pdu1UZmweE :2012/06/23(土) 01:33:43.00
>>994

なんだ


ただの
ゴミか

999 :uy ◆pdu1UZmweE :2012/06/23(土) 01:34:46.66
>>994

なんだコイツ

ゴミじゃねーか


1000 :uy ◆pdu1UZmweE :2012/06/23(土) 01:35:27.46
 

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

242 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)