[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 15:05 / Filesize : 175 KB / Number-of Response : 729
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現 Part6



1 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 00:36:04 ]
正規表現(Regular Expression)スレです。

質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。

【 前スレ 】 正規表現 Part5
pc12.2ch.net/test/read.cgi/tech/1212498448/

67 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 09:42:09 ]
それだったら~/も含める必要がありそうな。

68 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 10:03:33 ]
知らないならレスしないでください

69 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:15:39 ]
>>67
~\S*だから入るんじゃないのか


70 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:16:50 ]
^[~/]でもよさそうな気もするな

71 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 19:35:46 ]
IMOX って空白を含むディレクトリ名ってだめだっけ?

72 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 19:36:52 ]
困ったことに、使えるねぇ。

73 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 19:37:02 ]
キーボードが1列ずれた。すまんw
IMOX じゃなくて UNIX って書きたかった

74 名前:デフォルトの名無しさん [2009/05/29(金) 23:31:42 ]
何事もなく返答する>>72に萌えた

75 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:18:03 ]
よろしくお願いします。

現在Yahoo!pipes(ttp://pipes.yahoo.com/pipes/)を使っているのですが、
pipesの中でデータをURLエンコードしたいと思っています。
そのような機能はないので、正規表現(マニュアルによるとPerlライク)でやろうと思っているのですが、
Perlの関数を使えないのでunpackを使うやり方ができません。

純粋な正規表現のみでURLエンコードはできるものなのでしょうか。
修飾子として使えるのは「gsmi」のみです。




76 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:32:16 ]
>純粋な正規表現のみでURLエンコード
正規表現を利用してなら可能だろうだけど、正規表現のみじゃ無理
なんつーかノリも必要なペーパークラフトをハサミだけで作れって感じだ
URLっていう型紙からデータを切り抜くだけでどうやってURLエンコードを組み立てるよ

77 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:34:11 ]
/\x00/%00/g
/\x01/%01/g

/\xFF/%FF/g

78 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:46:46 ]
>>76
ですよね・・・

>>77
うおっ!

79 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:05:44 ]
>>77
それやると % と 0-F の文字が置換されないか?

80 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:21:31 ]
深く考えずに書いたネタにマジレスされても困るんだが、本気でこのアプローチを採用するなら、
0-9A-Fは置換する必要ないし、%を一番頭に持ってくればいい。

81 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 19:31:17 ]
行頭から6文字目までをマッチさせるにはどう記述したらよいでしょうか?

82 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 20:29:36 ]
^.{6}

83 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 21:22:45 ]
>>82
助かりましたありがとうございます

84 名前:デフォルトの名無しさん [2009/06/08(月) 23:24:52 ]
FlashのActionScript3.0(WinXP-Pro)です。

文字列中で特定の文字列のみに色付けをしようとしていますが、目的の文字列
以外でも色が付き困っています。

例えば、『名無し』という文字列のみを青色にしようとすると、独立した文字列
 名無し
はOKなのですが、「デフォルトの名無しさん」でも『名無し』が青色になってしまい
ます。

A名無しB という場合(前または後ろに不要な文字がある場合、つまり他の文字列
に組み込まれた場合)は対象から外し、単独の場合のみを対象したく思っています。

これに適した正規表現はありますでしょうか?


85 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:43:22 ]
^名無し$



86 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 00:22:19 ]
>>85
有難うございます。しかしながら、質問が不十分でした。
確かに独立した文字列は許可したいのすが、それ以外に A名無しB で
AまたはBが
1) 半角のスペースの場合
2) 半角の左括弧 ( の場合
3) 改行の場合
4) ピリオドの場合

に名無しを青色にしたく思っています。
当初、キャラクターコードとif文で分岐しようとしましたが煩雑になったので
正規表現を利用しようと思いました。

こんな場合はどうでしょうか?


87 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:48:17 ]
不特定の半角英数字と半角記号でできている半角文字列の中から (' ') に挟まれた数列だけを残して他を削除したいのですが方法はないでしょうか

例)
234hbhkltgfokdlthL+POL+PL>?*|{?('54653');
の中から54653だけを取り出し他を削除

※不特定文字列内において、 (' や ') は取り出す予定の数列を挟む場所以外では現れません

PHP

88 名前:デフォルトの名無しさん [2009/06/09(火) 13:17:17 ]
('...') は複数出現するのかな?一応それを考慮して

$a = preg_replace('/(?:(?!\(\').)*(?:\(\'(\d+)\'\))?/', '$1', $a);

89 名前:87 mailto:sage [2009/06/09(火) 13:47:46 ]
>>88
ありがとうございます
('nnn')は1カ所しか出てきません
自分で応用できないかやってみたんですがムリでしたw
1カ所しかでてこないバージョンを教えてくださいw

90 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:43:57 ]
PHPの書式は分からないけど、
\('(.+)'\)
で検索して、後方参照で\1だけ残せば良いんじゃない?

91 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:57:23 ]
>  \('(.+)'\)
Vサインしてるクマたんみたいでかわいい

92 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:32:12 ]
submatchでグループ化したものを抜き出せば良いんでない?

93 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 13:39:54 ]
(V)o¥o(V) フォッフォッフォ

94 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 08:14:41 ]
(a+b) - (b - c)

みたいな文字があって
()の中をそれぞれ取り出したい場合

(.*)ってやると
一番最初の(と最後の)でも一致してしまう
させたくないんだけどどうすればいいの?

環境はVB.NET

95 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:05:24 ]
>>94
特殊な意味を持つ文字は\でエスケープする

\([^)]*\) かな



96 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:14:48 ]
>>94
VB.NETはよく知らんが、大体「.*」ってやると「よくばり」モードになるぞ。
「よくばり」モードはその例の場合だと途中の括弧も飲み込んじゃって、
目一杯取ってくるから、「.*?」ってやるといい。
「?」をつけると「けちけち」モードになって、必要最小限しか取ってこない。

97 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:55:28 ]
>>94
最短一致でググるといいぜ

98 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 11:46:17 ]
非欲張り、という表現が一般的じゃないかと思うのだが。

99 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 11:55:08 ]
正しさはともかく一般的なのは「最短一致」

"最短一致" に一致する日本語のページ 約 2,610 件
"非欲張り" に一致する日本語のページ 約 373 件

100 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:21:42 ]
欲張りマッチの事、貪欲マッチと呼ばない?

101 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 00:00:57 ]
>>95で出来た
ついでにもう1つ
英数字の連続が5文字以上を一致させたい場合はどうすれば?

102 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 00:38:39 ]
礼の一つも言えんのか

103 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 08:52:01 ]
\w{5,}

104 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 16:57:22 ]
>>95さんありがとう
連続文字は自己解決した
{}の中身を{10}ってやると10文字以上という意味らしい
サンプルだと{10,20}みたいにしか書いてなかったから

105 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 17:11:29 ]
カンマ忘れてるぞ



106 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 18:09:05 ]
>>104
>>103さんが回答出してるのを無視して自己解決も何もなかろう。

107 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 21:01:48 ]
無視したからこそ自己解決なのではないかと。

という混ぜ返しはさておき、
"\w" は(一般的な実装だと)アンダースコアも拾うけどいいのかな。

108 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 12:15:03 ]
アンカ間違ってるだけで>>103を参考に解決したけど
全面採用じゃなかったから自己解決とかぬかしてるだけでは

109 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 12:48:38 ]
ちがうな、恐らくは>102を受けて、「ありがとう」と書いたのだろう。
好意的に解釈すれば、>103を見る前に自己解決したのかも知れん。

110 名前:デフォルトの名無しさん [2009/06/22(月) 11:09:00 ]
C#です
Match match = new Regex("AAA.+?BBB").Match(html);
としてAAAとBBBの間の文字列を抽出したいのですがなぜかできません

Match match = new Regex("AAA").Match(html);
Match match = new Regex("BBB").Match(html);
この二つはうまくいくのですが正規表現の書き方おかしいですか?
ちなみにAAAとBBBはhtmlタグです

111 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 11:28:41 ]
.+? って、1回以上の繰り返しが、あるかないか、という意味を意図してると思うんだけど、
そういう複合はできない。
0回以上の繰り返し .* でマッチさせる。

112 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:03:01 ]
>>111
> .+? って、1回以上の繰り返しが、あるかないか、という意味を意図してると思う
じゃなくて最短一致だろ

113 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:09:27 ]
最短一致です
("AAA".+?"BBB")は実際には
(<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"")
こんな感じです

114 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:09:34 ]
それだと、 . が改行にマッチしない事は理解してる?

115 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:11:26 ]
>>113訂正

("AAA.+?BBB")
("<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"")
こうです



116 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:15:40 ]
>>114
そうなんですか!?
どう書き換えればよいでしょうか

117 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:17:44 ]
RegexOptions.Singleline

111はどういう環境を想定してるんだろうね。

118 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:25:48 ]
>>117
できました!ありがとうございました

119 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 14:14:00 ]
●正規表現の使用環境
AutoHotkey 1.0.48.03 (Perl 5互換のPCRE)
lukewarm.s101.xrea.com/RegEx.html

●検索か置換か?
置換

●説明
""で囲われている箇所以外の行末コメントを除去したい。

●対象データ
key = value ; ccomment
key = "val ;lue" ; comment

●希望する結果
key = value
key = "val ;lue"

m`n)[\t ]+;.*(?=$) で 無差別除去まではできたんですが後方参照とか条件分岐の方法ががわからず。
key value comment 部はそれぞれ日本語の文字が入る可能性もあるんですが
AutoHotkeyのPCRE自体は2バイト文字が考慮されません(なので[:word:]とかは使えない状態です)
よろしくお願いします。

120 名前:デフォルトの名無しさん [2009/06/26(金) 11:50:32 ]
単純な正規表現は分かるのですが、これはどうすればよいでしょうか?

●正規表現の使用環境
PHP4

●検索か置換か?
置換

●説明
<del>タグにはさまれた任意の文字列を、文字数ぶん●で伏せ字にしたい。

●対象データ
昨日は<del>上戸さん</del>と飲みに行ったが、<del>17,000</del>円も奢らされてしまった。

●希望する結果
昨日は<del>●●●●</del>と飲みに行ったが、<del>●●●●●●</del>円も奢らされてしまった。

121 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 12:04:54 ]
>>120
preg_replace_callback使え。

122 名前:デフォルトの名無しさん [2009/06/26(金) 13:13:30 ]
>>121
そんな便利な関数があったとは、、。
ありがとうございました!

function toFuseji($matches) {
return $matches[1] . preg_replace("/./u", '●', $matches[2]) . $matches[3];
}

preg_replace_callback("/(<del>)(.+)(</del>)/", 'toFuseji', $str);

123 名前:デフォルトの名無しさん [2009/06/26(金) 22:30:17 ]
●正規表現の使用環境
C#2008 Regex.IsMatch

●検索か置換か?
一応検索

●説明
特定の文字列以外があるかをチェックしたい
SQLの話も混じりますが、要はSELECT文の後に
更新や変更するような命令があるかをチェックしたい
のです。
UPDATEとかそれぞれを書いていくのは漏れるかも
しれないのでSELECT、FROM、WHEREあたりを除いて
マッチさせるにはどう書いたらいいでしょうか。
試した文
^SELECT (?!.* [A-Z](?!ELECT |ROM |HERE ))

●対象データ と望する結果
マッチさせたい "SELECT * FROM AAA [UPDATE]"
マッチしたくない "SELECT * FROM AAA UPDATE"




124 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:52:35 ]
何らかの処理系なら、else節で処理しちゃう手もある。

125 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 15:21:44 ]
>>123
念のため聞くけど…
まさかこれってSQLインジェクションの対処のためにやってるんじゃないよね?





126 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 19:03:21 ]
『id059385,,』のように、固定文字列idの後にランダムな数列、その後ろにカンマがふたつ格納された変数から、最後のカンマをひとつだけ取り除きたいのですが、
for文で回ってる途中まれに同一変数に『,,,』のようにカンマが3つ連続して出てくることがあり、その場合は取り除きたくないので
原始的に(",,",",",$変数)のようなことができません
あくまで、固定文字列id、その後に数列、その後にカンマふたつという状況でのみカンマひとつ取り除く方法はないでしょうか

PHP5

127 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 19:35:50 ]
最後に2つある時だけ取りたいならこうするかな
preg_replace('/(?<!,),,$/', ',', 'id059385,,');

128 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 19:43:04 ]
>>119
これ難しいね。
excelなら、Instrrev使えばすぐだけど、正規表現だとどうやるんだろ。

129 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 15:35:58 ]
>>119
Perlならこれでいけるっぽいけど、どうかな。だめかな

s/((?:[^;]*?".*?")*[^;]*)(?:.*?$)?/$1/mg

130 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 18:07:37 ]
'"' 自体のエスケープはどうなっているのかと、 Shift_JIS への対応が気になるかな。

131 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:27:07 ]
使用環境 WSH 検索
対象データ ^AAA(BBB(CCC)(ddd)))(FFF)(GGG)$

文末の、括弧記号を含まず括弧で囲われたものが連続しているもの
を検索したいけど挙動が違います。

1) /(?:\([^(]+?\))+$/ 検索結果→ (CCC)(ddd)))(FFF)(GGG)
2) /(?:\([^)]+?\))+$/ 検索結果→ (FFF)(GGG)

欲しい結果は2の方です。
文末の$を指定した時は通常とは逆に文末から左へ一文字づつ検索していると考えていいんですか?

132 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 11:23:57 ]
>>131
そりゃ前から読んでもそうなるだろ

>\([^(]+?\)
「括弧の間に開き括弧を含まないもの」だから"(ddd)))"にもマッチする

>「括弧記号を含まず」「括弧で囲われたものが」「連続しているもの」
/(?:\([^()]+?\)){2,}/

133 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 11:24:38 ]
「文末の」を見落としたスマン

134 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 11:51:09 ]
> 文末の$を指定した時は通常とは逆に文末から左へ一文字づつ検索していると考えていいんですか?

そういう動作はしない。


135 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:48:16 ]
/unko$/

/unko\r\n/
と同等と考えればわかりやすいだろう
(厳密には違うけど)



136 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 23:16:49 ]
>>128-129
レスありがとうございます。
お礼が遅くてすみません。週末からリロードし忘れてました。

質問後自分なりに頭捻って、((".*?")|;.*(?=$)) , $2 とか無理やりやってたんですが
>129さんのでいけました。特に (?: )の使い方が参考になります。ありがとうございます。

今回の件とは直接関係ないんですが、除外文字列の表記がよくわからずいつも悩みます。
今回の例でいうと コメント文字列が「;」ではなく「 ;」(半角スペース+セミコロン)だった場合とか
(?:(".*?")|[\t ]+;.*(?=$)) , $1 みたいな方法で弾くしかないのかな。

137 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 00:15:50 ]
いや、普通にそっちのほうがシンプルでいいよ
なんであんなに複雑い書いたのかマジ俺イミフ。しにてえ

138 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 23:41:47 ]
.NETの話なんだけど
ttp://msdn.microsoft.com/ja-jp/library/bs2twtah(VS.80).aspx#BalancingGroupDefinitionExample
この例の正規表現がどうして <> の入れ子構造にマッチするのか上の解説読んでもよく分からないので誰か分かりやすく説明してください
「name2 グループと現在のグループの間隔をグループ name1 に格納します。」って文があるけど
この「name2 グループと現在のグループの間隔」っていうのはリンク先の例で言うとどこからどこまでなのかとか
格納するっていうのがつまりどういうことなのか、って言うレベルでさっぱり理解できてない・・・
最後の "(?(Open)(?!))$" にいたっては自分の中で暗号と化してるorz

139 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 03:33:28 ]
わかりやすくは多分無理だな。

Openでカウントが増える。
Close-Open でそのそのカウントが減る。

んで、開きと閉じのアングルブラケットの数がバランスしていれば カウントは0になるので

"(?(Open)(?!))$";

の条件が (?!) ではなくなる。
この(?!) というのは要するに何にもマッチしないもの。


140 名前:123 mailto:sage [2009/07/03(金) 21:01:48 ]
>>124
うまく書けなかったので要素に区切ってチェックすることにしました。
>>125
SQLインジェクションって知らなかったけど、悪意のある入力の
チェックって感じかな?
入力文字はSQL文が前提で、そこまで重い意味合いのチェック
ではありませんでした。
SQLインジェクション対策って普通Regex.Escapeを通すのかな?



141 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:07:18 ]
言語によるが、DB系のライブラリにバインディング機能があれば普通はそれを使う。
自作のお手製ライブラリはやめた方がいい。
DBによって攻撃の仕方が違うし、
よく知ってる人が作っていろんな人が使ってるやつの方がやっぱり圧倒的に安全。
詳しくはそれっぽいスレで聞いてくれ。

142 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:16:14 ]
>>140
何のためにそんなことをしたいのか分からないが、
ユーザにSQLクエリを入力させて実行させたい、とかいう話なら、
クエリ式に対してチェックをするのではなくて、
データベースの更新が出来ないような権限でクエリを実行すべき。

143 名前:123 mailto:sage [2009/07/03(金) 21:16:15 ]
>>141
そうなんですか。調べてそっちの方向に変えてみます。
よく考えたらSQL文にRegex.Escapeなんて
なんの関係もなかった・・・。

144 名前:123 mailto:sage [2009/07/03(金) 21:20:04 ]
>>143
権限で〜ってのは思ってたんですが、触れない事情がありまして。
普通はそうなんですね。
スレ違いになってきたのでこの辺で終わっときます。
ありがとう。


145 名前:デフォルトの名無しさん [2009/07/04(土) 21:44:21 ]
●正規表現の使用環境
PHP ver 5.2

●検索か置換か?
置換

●説明
カッコ書きのある文章のカッコの中身を取得したい。
たとえば、
カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後
の文章に対して、後方参照で
arr[1] = カッコ書き前()カッコ書き後
arr[2] = カッコ1()カッコ1後
arr[3] = カッコ2()カッコ2後
arr[4] = カッコ3()カッコ3後
と言った感じで取得したい。

試した文
$preTxt = 'カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後';
$match = '/.*(\(.*\)).*/';
preg_match("$match",$preTxt,$arr);
結果
[0]= カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後
[1]= (カッコ3)カッコ2後)カッコ1後)

●対象データ と望する結果
上記記載

すみません。どなたかお願いします。



146 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 22:10:12 ]
HTMLタグの中身を抜き出すのに近いね。
別の自作関数を作っておいて、

arr[1] = \1 & \7
arr[2] = \2 & \6
arr[3] = \3 & \5
arr[4] = \4

なんてのはどうかな。
もっとスマートな方法もあるかもしれないけど、今でもこれ使って動かしてます。


147 名前:デフォルトの名無しさん [2009/07/04(土) 22:43:50 ]
回答ありがとうございます。
でも、多分、俺って、あなたの思っている以上の馬鹿みたい。
全くもって、理解できないんですけど・・・・・・・。
もうちょっとわかりやすくしていただけると助かります。
って、馬鹿がわかりやすい解説って、わかってる人にはかなり難しいんだと思いますけど。
すみません。わがまま言って。

148 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 23:28:20 ]
外側から攻めていって、カッコがなくなるまでループするとか
function foo($text) {
$kekka = Array();
$match = '/^(.*?)\((.*)\)(.*)/';
while (preg_match($match, $text, $arr) > 0) {
array_push($kekka, $arr[1] . "()" . $arr[3]);
$text = $arr[2];
}
array_push($kekka, $text);
return $kekka;
}
$arr=foo('カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後');
print_r($arr);

149 名前:デフォルトの名無しさん [2009/07/05(日) 12:38:53 ]
ありがとうございます。
完璧です。
ほんとにありがとうございました。!!

150 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 12:56:11 ]
なるほど、賢いなぁ

151 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 14:24:31 ]
147は138かな?

もうちょっと努力して説明してみるから少し待ってね。


152 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:21:42 ]
147は145 で PHP5、.NET の138とは別の人、だと思うけど。

153 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 16:48:27 ]
>>139,151
138です、レス遅れてすみません
自分で試しつつなんとか(?<name1>p1)+(.*)(?<name1-name2>p2)+ という表記なら
(p2にマッチした回数 - 1) 個だけ name1とname2のキャプチャを取り出して
(.*)の両端にくっ付けていく(ただし取り出すキャプチャの 最大数は (p1にマッチした回数-1) 個)のかな
という感じで理解し始めてますが・・・

それと?(Open) という書き方は ? と () までも含めて、Openを文字列リテラルとしてではなく
(既に同じパターンのより先頭部分で定義されている)Openという部分パターンの
グループ名だということを示すための表記法なんでしょうか?
こっちは試し方も良く分かりません・・・

154 名前:151 mailto:sage [2009/07/06(月) 03:10:01 ]
(?'Open'<)
というのは、named caputure でこの場合は < を Open という名前で捕獲するもの。
この場合は捕獲自体には意味はなくて裏で増やしているカウンタが重要。そして
(?'Close-Open'>)
この部分で Open のカウンタを1減らしている。< と > の数が同じであれば、
(?(Open)(?!))
まで来た時点で Openの値は0になっているはず。

で、この表現なんだけど (? (Open) (?!) ) が、? に続く部分正規表現が「真」であれば (?!) を
マッチの条件にするというプログラミング言語の if 〜 then 〜 みたいなもの。

解説は
msdn.microsoft.com/ja-jp/library/36xybswe(VS.80).aspx
にある。

そして Open が0でない==バランスが取れていなければ (?!) のチェックを
するのだけど、これは前回も書いたように絶対にマッチに失敗するというパターン
なので、全体を通してみるとバランスが取れていればマッチ成功。
そうでなければ失敗。という次第。



155 名前:デフォルトの名無しさん [2009/07/10(金) 10:33:02 ]
オライリーの「詳説 正規表現 第3版」を読んで疑問に思ったので質問します。

5章にある「IPアドレスへのマッチ」で、0から255の数字にマッチする正規表現のサンプルがありますが
 [01]?\d\d?|2[0-4]\d|25[0-5]

これだと、最初の選択で [01]? がオプションなので、たとえば "999" が "99" に
マッチしてしまうような気がするのですが、問題はないのでしょうか。
よろしくお願いします。



156 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 10:43:53 ]
その後で、
 ^([01]?\d\d?|2[0-4]\d|25[0-5])\. (中略) \.([01]?\d\d?|2[0-4]\d|25[0-5])$
として前後の境界を指定して利用してるから問題ないんじゃないの?

数字だけを取り出したいのであれば、例えば、
 \b([01]?\d\d?|2[0-4]\d|25[0-5])\b
みたいに前後を指定する必要があるよね。

って、そういう話ではなくて?

157 名前:デフォルトの名無しさん [2009/07/10(金) 10:49:11 ]
>>156
あぁ、すみません。
たしかに ^ $ で境界を指定すれば問題ありませんね。
部分式ばかり考えていて見えませんでした。

ありがとうございます。

158 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 01:41:17 ]
これ教えてーーーーー

●正規表現の使用環境
VB.NET

●検索か置換か?
検索

●説明
タグの外の文字列を順に取得したい

●対象データ
<html1><html2>AAA<html3>BBB<html4><html5>CCC<html6>DDD<html7>
だったり
<html1>AAA<html2>BBB<html3><html4><html5><html6>CCC<html7>DDD

●希望する結果

r = New Regex("(?<1>.+?)(?<2>.+?)(?<3>.+?)(?<4>.+?)" ←今こんな感じ

Console.WriteLine(m.Groups(1).Value)
で結果 AAA
Console.WriteLine(m.Groups(2).Value)
で結果 BBB
Console.WriteLine(m.Groups(3).Value)
で結果 CCC
Console.WriteLine(m.Groups(4).Value)
で結果 DDD


159 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 02:48:28 ]
>>158
Match()一発じゃなくてMatches()で地道にいっこずつ切り出してみた。もっといい方法はあるかもしれん

Dim r As Regex = New Regex("(?:<.*?>)+(.+?)(?=<|$)")
Dim s As String = "<html1><html2>AAA<html3>BBB<html4><html5>CCC<html6>DDD<html7>"
For Each m As Match In r.Matches(s)
  Console.WriteLine("{0}", m.Groups(1).Value)
Next

160 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:55:51 ]
正規表現、特にNFAって計算量が大きいので
実用上、30〜40文字ぐらいが限界だったように記憶してるのですが
NFAとDFAでの計算量ってO表記でどのぐらいでしたっけ?
wikiにそういう情報のせといて欲しい・・

161 名前:デフォルトの名無しさん [2009/07/26(日) 10:56:30 ]
PHPのpreg(perl互換)の話なのですけど、
/(?<=<div>)(.*?)(?=<\/div>)/is
はエラーにならなくて
/(?<=<div[^>]*>)(.*?)(?=<\/div>)/is
がエラーになる理由が分からないのですが、
なぜなのでしょうか

162 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:59:13 ]
なぜと言われても・・・そう設計してあるから、としか言いようがないな

163 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:01:24 ]
>>2 の「正規表現メモ」の (?<=pattern) の解説には

  固定長の文字列に対してのみ働きます(処理系による。可変長の文字列を許可する処理系もあります

と書いてある。つまりそういうことだ。

164 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:06:41 ]
なるほど。これは固定長のみでしたか。
ありがとうございます。
別のルートから正規表現の方法を探す事にします。

165 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 17:28:23 ]

/(?<=<div[^>]{0,99}>)(.*?)(?=<\/div>)/is

可変長は無理でもこの書き方({0,99})がOKな処理系もあるから試してみろ




166 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 09:08:56 ]
>>160
DFAの計算量は自明でしょ。
NFAはパターンとテキストによって違うから一概には言えないんじゃないかな。


167 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 12:33:41 ]
適当なことばっかり言うのはやめてください

168 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 13:29:38 ]
セルフでコンプリートすればパーフェクトですよ

169 名前:デフォルトの名無しさん [2009/07/28(火) 16:26:27 ]
マッチする判定じゃなくて
正規表現書いたらそれを満たす全ての文字列を生成する
プログラムを書くのは難しいですか?

170 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:33:47 ]
^.*$

171 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:35:25 ]
正規表現によっては終わらない可能性があるわけだな

172 名前:デフォルトの名無しさん [2009/07/28(火) 16:37:23 ]
>>170
それをやると遅延評価的に必要な分だけ垂れ流すんです

173 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:37:58 ]
文字数限定すればできることはできる
指定字数の全ての組み合わせの文字列をその正規表現にマッチさせて
成功したものだけをリストアップすればいい

速度的にどれだけ実用になるかは不明
最適化するとなると論文レベル

174 名前:デフォルトの名無しさん [2009/07/28(火) 16:40:11 ]
フィルターにかけるのではなく
初めから有効な物しか生成しないものとします

175 名前:デフォルトの名無しさん [2009/07/28(火) 16:42:08 ]
>>174
よし、正規表現をパースすることから始めよう。



176 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:42:44 ]
等価な有限オートマトンをバックトラックしながらしらみつぶしに探索するような
プログラムを書けばできそうだな。

177 名前:デフォルトの名無しさん [2009/07/28(火) 16:56:58 ]
数学的に可能ですか?
僕が心配してるのは5次以上のn次方程式の一般解
を探そうとしていやしないかという事です

178 名前:デフォルトの名無しさん [2009/07/28(火) 17:00:53 ]
取り敢えずオートマトンを学ぶに適した良書を紹介して下さい

179 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:12:42 ]
> 正規表現書いたらそれを満たす全ての文字列を生成する

> それをやると遅延評価的に必要な分だけ垂れ流すんです

> 初めから有効な物しか生成しないものとします

> 取り敢えずオートマトンを学ぶに適した良書を紹介して下さい


何をしたいんだよ?お前は。
とりあえず学校の宿題なら自分でやれ。それか自分で調べろ


180 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:33:48 ]
ごめんなさい><

181 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:46:04 ]
>>179
とりあえずかの有名なこれでいいんじゃねーの?

ttp://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-1026-0&YEAR=2003
ttp://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-1027-7&YEAR=2003

182 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:52:14 ]
>>181
あり^^

183 名前: [2009/07/29(水) 13:06:01 ]
聞くのもどうかと思ったんですが調べても解決しなかったので、聞きたいのですが
『正規表現の定義』ってなんですか?

184 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:11:58 ]
ほんとに調べたのか?

185 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:18:50 ]
文字列一致確認用プログラミング言語



186 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:19:32 ]
>>183
アルファベットΣ上の正規表現とは、
- 空集合 0
- Σ の要素 c
- r, s が正規表現のとき r + s
- r, s が正規表現のとき rs
- r が正規表現のとき r*
のいずれか。

187 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:23:42 ]
>>186
宿題は自分でやらせろよ。

188 名前:末吉 [2009/07/29(水) 14:16:10 ]
>>186
183は定義を聞いてるんだろ??

189 名前:デフォルトの名無しさん [2009/07/29(水) 15:17:02 ]
定義じゃん

190 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 15:56:14 ]
>>188

ここの「形式言語理論における正規表現」を見ろ

ttp://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE



191 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 16:05:59 ]
見るなら正規言語だろう。
ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A8%80%E8%AA%9E

192 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 16:46:52 ]
正規言語と正規表現は本質的には同じだけど違うものだし

193 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 17:11:51 ]
>>181は激しく良書なので啓蒙しとく

大学のオートマトンのテキストがひどかったので
この本は難しいだろうと思ってずっと敬遠してたが
これはとてもわかりやすかった
予備知識もほとんどいらない
(最初のほうは背理法だとか数学的帰納法のレベルから解説)

厳密な定義がちゃんと書いてあるが
それに先だって具体例をあげて説明がある

ただ、この本を読んでも>>169の実装に直接には役立たないかもしれない
(0+1)*1(0+1)+(0+1)*1(0+1)(0+1)のような正規表現を簡約して
より計算しやすい正規表現に変換する
といった最適化なら正規表現の代数的性質の章でちょろっと学べる

194 名前:169 mailto:sage [2009/07/29(水) 19:37:54 ]
直接役には立たなくても正規表ゲニストを目指す僕は
正規表ゲニスト名乗っててオートマトンも知らんのかと
馬鹿にされるのは嫌なので オートマトニストにもなります><

195 名前:デフォルトの名無しさん [2009/07/29(水) 19:59:04 ]
もういいから消えろよ



196 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 23:55:35 ]
aaa/bbb/ccc
aaa/bbb/ddd
aaa/ccc/eee
  ・
  ・
  ・

上のような文字列があって正規表現での検索時間(grepとか)を速くしたいと思っていますが、
高速化するために正規表現の合成?みたいなことができるようなライブラリってありますでしょうか?

検索したい文字列のリストはだいたい1行が30〜40文字程度で100行〜200行ほど
検索対象はファイルサイズで400Mbyte〜6Gbyteぐらいです。


197 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 00:09:32 ]
質問をもっと推敲しろ

198 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 00:10:30 ]
必要ない行はgrepで飛ばして読めばおk

199 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 00:13:49 ]
grepパイプでつなげば十分なんじゃね?

200 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 00:46:05 ]
パイプって言いたかっただけやんwww

201 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 03:14:06 ]
>>199
せめて -e を並べるか -f だろー。

202 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 09:14:17 ]
fgrep使うのが正解

203 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 12:45:55 ]
いつから言葉遊びをするスレになったのですか?

204 名前:デフォルトの名無しさん [2009/07/30(木) 14:47:20 ]
正規表現は秀丸でちょこっと\n\n\nとか^[a-z]くらいをいじっただけの初心者なのに、
Javaで、JavaのDecimalFormat用文字列を
Excelの数値フォーマット定義文字列に変換するフィルターを作ってます。
『他の人にやらせりゃいいのに…まあ調べればわかるやろ…』と思って始めましたが、
案の定、いきなり引っかかりました。www

1)引用符'を引用符"に変換する正規表現(ただし連続''は'自体を表すので"にしない)
2)''に囲まれていない浮動小数点EをE+に ([0#])(E)([0#])を\1E+\3に

なお、変換は単一の正規表現で行う必要はなく、
順序依存のある複数の置換をかけてもOKです。
ただしできれば、各フィルターは常に全文に適用したいと思います。
(不要なフィルターも通過させる)

最悪、一部の変換結果を絶対にユーザが使わない予約語に変換して避けておく…
ということも可能だと思いますが…

正直、いきなり1)で引っかかったのにはガックリきました。
フィルター文字列定義をpropertiesで外出しにして
出荷後もサポートで変更・追加できるようにしないとマズイな…

205 名前:204 mailto:sage [2009/07/30(木) 14:56:08 ]
作成中ソースの一部ですが、何をやりたいかは見当つくと思います。
これが論理的にダメダメと言うことはわかってます。

//////////////////////////////////
//シングルクォート囲みをダブルクォート囲みに

//'"'→\"
//まず引用符の中の"自体をエスケープする。\"
filter = new RegFilter("'\"'","\\\"");
filterlist.add(filter);

//シングルクォート囲みをダブルクォート囲みにする前に、
//連続''は'1個をあらわすので、"'"に変換してやる。
filter = new RegFilter("''","'");
filterlist.add(filter);

//シングルクォートをダブルクォートに変換してやる。
//ただしさっきのを除く必要がある。
filter = new RegFilter("[^']'","\"");
filterlist.add(filter);

//全フィルターを通す変換実行
sResult = executeFilters(sFormat, filterlist);




206 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 15:49:13 ]
うん、わかるね

207 名前:204 mailto:sage [2009/07/30(木) 15:56:54 ]
msdn.microsoft.com/ja-jp/library/2k3te2cs.aspxにいいのがありますた。
1)は
(')([^']+)(')→\"\2\"
''→'
の2つでいけるかなぁ…


208 名前:204 mailto:sage [2009/07/30(木) 16:24:35 ]
2)の浮動小数点EをE+にするのは、

引用符の中のEだけをEEに退避
([^']+)(')([^']+)(E)([^']+)(')([^']+)→\1\2\3EE\5\6\7
浮動小数点のEをE+に
(*.)([#0])(E)([#0])(*.)→\1\2E\+\4\5
退避したEEをEに戻す
(*.)(EE)(*.)→\1E\3

の3つで97%くらいは出来てるかなあ。
変換対象の最後が引用符のときに落としちゃうけど、まあ…

209 名前:204 mailto:sage [2009/07/30(木) 16:27:22 ]
*と.が逆だった。

引用符の中のEだけをEEに退避
([^']+)(')([^']+)(E)([^']+)(')([^']+)→\1\2\3EE\5\6\7
浮動小数点のEをE+に
(.*)([#0])(E)([#0])(.*)→\1\2E\+\4\5
退避したEEをEに戻す
(.*)(EE)(.*)→\1E\3


210 名前:204 mailto:sage [2009/07/30(木) 16:40:36 ]
最初から地にEEがあるとEになっちゃうか。
横着せずに引用符の中のEEだけをもどさないとだめだな。

211 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 19:06:52 ]
ダブルクォートの中にカンマを含むフィールドのことを考えると
正規表現よりは文脈自由言語でパースしたほうが絶対にいい

212 名前:204 mailto:sage [2009/07/31(金) 10:43:27 ]
かも知れないけど、開発の立ち上げ工数と、今後のメンテを考えるとなー。
(あまり入出力仕様は変わらないと思うが、日付フォーマット変換の追加がありうる)
正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。

また、必ずしも完璧に作る必要はなくて、
ユーザが業務で使うごく一般的なフォーマット文字列を通せれば後は制限事項でもいいし。
それをいえば、想定顧客に、浮動小数点使ってる人なんていないんじゃないかと思うけどね。。。

213 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 11:31:23 ]
>>212
> 正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。

いねーだろ。どの口が言ってんだ?あん?

214 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 11:58:34 ]
ていうかここって日記スレなのか?

215 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:16:24 ]
正規表現はフィットする目的には早く書けるけど、保守性は悪いし実行
速度は遅いしで、まともなプロジェクトには使わないよ。




216 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:21:08 ]
まともでないプログラマ乙

217 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:24:55 ]
>>216
>>204 に回答してから言えよ。

218 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:27:31 ]
言うほど保守性が悪いとも思わないし、実行速度も
用途に十分なら別にかまわんしなぁ。

むしろ正規表現使わずにだらだら書かれたほうが
見通しが悪くて遅い場合も多い。適材適所。

219 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:28:28 ]
>>218
>>204 に回答してから言えよ。

220 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:33:32 ]
>>219
問題がよくわかんないし、javaとexcelだしスルー。

221 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:37:46 ]
そもそも便所の落書きに仕事を持ち込まれても知らんし。

222 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:14:57 ]
>>212
正規表現で書かれたフィルタのバグ取りなんてぞっとする
ちゃんとした技術者なら、RFCにCSVのBNFがそのまま載ってるんだから
BNFの通りにコーディングすりゃ
テスト含めて1日で終わるよ

223 名前:204 mailto:sage [2009/07/31(金) 13:15:56 ]
>>213
おっと確かに! 居ないからこそ、漏れがやる羽目になっとるわけだがwww
(出来る人に空きが無いという理由もある)
しかしま、コトは相対比較で十分なんで。

>>221
まあねえ。ML探して加入して自己紹介して
過去ログ検索して質問投げるってのが本来なんだろうが。
でもwww.rubular.com/とかでちょこちょこやるうちに
何とかなりそうな気がしてきた。

224 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:26:42 ]
>>207
'''hoge' みたいなパターンがダメなのでは。

>>205 がよくわからんのだが、正規表現の変換処理のリスト (filterlist) を積んで、
executeFilters() でそれらを順番に逐次処理して適用する、ということ?
そんなん絶対うまくいかんと思うが。

225 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:43:19 ]
絶対入力するなよ!絶対だぞ!絶対入れるなよ!
で切り抜けるんだろう



226 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:56:39 ]
>>211
だよねー。

Java は良く知らないんだが、 JavaCC とか使えばスッキリ書けないのかね?

227 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 14:17:27 ]
CSV扱うライブラリぐらいjavaにもありそうなもんだけどな。

228 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 16:40:25 ]
Javaでも20行未満で書けるレベルの処理だろうに。


229 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 16:50:34 ]
>>228
お前がそれをさっさと書かないからこのネタが延々と終わらんだろうが。

230 名前:デフォルトの名無しさん [2009/07/31(金) 16:56:53 ]
ライブラリあるの?

231 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 16:57:34 ]
SuperCSVオススメ

232 名前:デフォルトの名無しさん [2009/07/31(金) 18:02:03 ]
>>228
期待age

233 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 04:17:10 ]
それをここでやるのはスレ違い。

234 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 08:51:21 ]
逃げる気か?

235 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 10:11:53 ]
>>234
あんた馬鹿?



236 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 12:43:12 ]
逃げやがったな。口だけ達者で、ほんとは何も出来ないヤツw

237 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 12:45:19 ]
>>236
あんた馬鹿?

238 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:24:30 ]
負け犬めガッ!一生逃げ回ってろ

239 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:29:08 ]
なにこの粘着質

240 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:30:20 ]
質問者でしょ。それ以外に利益のある人はいない

241 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:33:21 ]
人生の敗北者!

242 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:44:54 ]
質問者はもっと回答者に敬意を持って接しろ

243 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 14:01:48 ]
愉快犯の荒らしだろ。放置推奨

244 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 23:44:50 ]
228 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/31(金) 16:40:25
  Javaでも20行未満で書けるレベルの処理だろうに。

     ↑
できもしないことを、いい加減に書くのは、質問者に対して失礼。
第三者も見ていて不愉快。
おまいこそ最悪の荒らし!

245 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 00:07:19 ]
そんなに粘着する必要あるのかと。

>>228が無知で、何も知らずに発言しちゃっただけかも知れないんだぜ?
くだらないプライドを守っている暇があったら、勉強して技術向上して
人生をエンジョイした方が、オタク(というかハッカー精神)的に
意味のあるものになるんじゃないのかね?



246 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 00:26:43 ]
なにしにきたんだよ もう帰れよ

247 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 06:43:38 ]
Javacに一行の文字数制限があったかどうかが
気になってしようがないわけだが。

248 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 11:29:02 ]
無知で、何も知らないならレスしないでください。

249 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 11:42:35 ]
そもそも 204って質問だったのか?
アドバイスが欲しいらしいのはわかるが、お願いします的なセリフは何も書いてないだろ
ウゼー独り言延々書き込んでるやつがいるなぁ位の認識だったんだが。

250 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 16:12:46 ]
珍しく伸びていると思えばこれか


251 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 16:38:58 ]
喧嘩嫌

252 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 16:54:39 ]
>お願いします的なセリフは何も書いてないだろ

www
苦しい言い訳。
「お願いします」口調なら、「Javaでも20行未満で書けるレベルの処理」になるのかい?

253 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 16:59:48 ]
まあ書いてやってもいいかな、くらいだけどな

254 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 23:12:00 ]
>>253
中学生2年生かおまいは

255 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 05:00:11 ]
中学生はジャポニカ学習帳でも焼いて食ってろ



256 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 07:08:27 ]
中学二年生にだって天才はいるかもだろ
ニヤニヤと見守るのがベター

257 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 13:34:29 ]
おっと〜!自称「天才」中学2年生現る!

・・・で?20行で書けないの?天才さんw

258 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 13:35:10 ]
今なら30行に負けてあげてもいいんだけど

259 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 19:18:18 ]
マジキチ

260 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 19:21:17 ]
土日は遊んでたので見てなかったがまだやってんのか。ヒマだね〜

261 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:25:05 ]
どうした?30行でも不足か?
そっちが20行と言ったから20行なわけで。
べつに、40行でも50行でも構わんのだがな。

262 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:27:15 ]
マジキチ

263 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:37:57 ]
>Javaでも20行未満で書けるレベルの処理だろうに。

こいつ、恥ずかしくなって逃げたのか。布団かぶって泣いてるのか?

264 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:43:09 ]
マジキチ

265 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:36:06 ]
なんだこの流れ
Javaよくわからんから20行が無茶ぶりなのかどうか知らんけど
一体何が夏厨の琴線に触れちゃったの?
質問者不在で誰も求めてないコード請求してもしょーがなくね?



266 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:43:39 ]
生理の日かアレな人かどちらか

267 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:49:27 ]
javaで20行書くのに、いったい何日かかってんだよ。
速いとこコードを晒せ。それですべて解決する話だろ?

268 名前:デフォルトの名無しさん [2009/08/03(月) 23:55:01 ]
マジキチ

269 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 07:15:52 ]
おはよう!10行くらい書けた?まだかな?

270 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 07:38:06 ]
酔っぱらいに絡まれた感じってこんなんだよな

271 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 08:03:12 ]
schemeでCSVパーサを書いた
BNF通りのCSVの定義が19行、呼び出し8行、コンビネータパーサ80行

しかしよ、実はCSVのパースなんか全く関係なくて
問題はDecimalFormatのパースじゃねーか

ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/text/DecimalFormat.html
ここにBNFライクな仕様が載ってるから
これをパース後数値にして、コンマ/改行で区切って出力すりゃいい
楽をするならJParsec

272 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 08:29:37 ]
Javaなら20行で書ける!

273 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:08:46 ]
そもそも大抵の言語は1行にいくらでもつめられるからできて当たり前ww
pythonだと難しいかもな。

274 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:17:44 ]

世間を知らない井の中の蛙

275 名前:204 mailto:sage [2009/08/04(火) 09:41:26 ]
土日は自宅プロバイダの書込制限ですまそ。現状はこんな感じ。網羅的テストはまだ。
エスケープ処理が多重にかかるのでちとわかりにくいかも。

引用符の外側を一撃で取れないので、
内側の退避と復旧手順が入って無駄に複雑になってます。
引用符のパースはjavaでかけるべきだったかな…


/**
* 正規表現パターン文字列と、置換文字列で1セット。上から順に解釈適用する。
*/
public static final String[][] FORMAT_FILTER_ARRAY = {
//////////////////////
//浮動小数点対応
//引用符の中のEだけをEEに退避
{"([^']+)(')([^']+)(E)([^']+)(')([^']+)", "$1$2$3EE$5$6$7"},
//浮動小数点のEをE+に
{"(.*)([#0])(E)([#0])(.*)", "$1$2E\\+$4$5"},
//退避したEEをEに戻す
{"([^']+)(')([^']+)(EE)([^']+)(')([^']+)", "$1$2$3E$5$6$7"},
//////////////////////
// シングルクォート囲みをダブルクォート囲みに
{"(')([^']+)(')", "\"$2\""},
{"''", "'"},
//////////////////////////////
//多重エスケープ対応
//
//多重にエスケープ処理が走るため。\1個でも\を出せるように倍にしておく。
{"\\\\", "\\\\\\\\"}
};




276 名前:204 mailto:sage [2009/08/04(火) 09:43:17 ]
あと、変換対象データが整数の場合だけの処理も入れざるを得なくなった。
小数点を最後に残すExcelの仕様のせい。

/**
* 整数値の後ろの余分な小数点を削除する。
* ここでは引用符は"に、浮動小数点はE+に変換後なので注意。
*/
public static final String[][] DOT_FILTER_ARRAY = {
//////////////////////
//整数の場合の余分な小数点対応(浮動小数点で無い場合)
//引用符の中の.#を..#に退避
//{"([^\"]+)(\")([^\"]+)(\\.#+)([^\"]+)(\")([^\"]+)",
{"([^\"]*)(\")([^\"]*)(\\.#+)([^\"]*)(\")([^\"]*)",
"$1$2$3\\.$4$5$6$7"},
//浮動小数点の#.#E#を#..#E#に退避 上の変換とは重ならない。
{"(.*)([0#])(\\.#+E\\+[0#])(.*)", "$1$2\\.$3$4"},
//上記変換対象にならなかった-つまり..#でない.#+を削除
{"(.*)([^\\.])(\\.#+)(.*)", "$1$2$4"},
//浮動小数点の#..#E#を#.#E#に復旧。引用符の中の外し方がわからない。
{"(.*)([0#])(\\.)(\\.#+E\\+[0#])(.*)", "$1$2$4$5"},
//引用符の中の..#を.#に復旧
//引用符の中にもともと..#があっても、...#になって..#に戻るはず。
{"([^\"]*)(\")([^\"]*)(\\.)(\\.#+)([^\"]*)(\")([^\"]*)",
"$1$2$3$5$6$7$8"}
};

277 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:49:56 ]
これ見たら >>218 とかブン殴りたくなってきたんだが。

278 名前:204 mailto:sage [2009/08/04(火) 09:51:49 ]
20行の成否はどうでもいいんだけど、もし可能であれば教示していただけるとうれしい。
仕事はともかく、美しいコードには感動があるのでね。
(とはいえ、他人が見てわからないコードはよろしくないので、
無理に圧縮した20行より、読みやすい100行の方がいいけど。)

>>224
n回フィルターすると、フィルター相互の矛盾衝突のチェックがn(n-1)必要になるから、
フィルターが増えるほど加速的に困難になる…という趣旨ですよね。
しかし、3行1セットで1個の処理をするフィルターを作成し、
そのセットが他には絶対に影響を与えない堅固なものであれば、
必ずしもn(n-1)にはならないのではないか…と思って手をつけたわけですが…
しかし実際やってみるとそうはなってませんな…引用符処理が誤算でした。

279 名前:デフォルトの名無しさん [2009/08/04(火) 09:56:00 ]
おい、ここはニートのスレですか?

280 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:59:41 ]
なんだなんだ、また日記が始まるのか

281 名前:204 mailto:sage [2009/08/04(火) 10:05:11 ]
いやいや、みなさんオチがついてないと気持ち悪いでしょ。サービスのつもりだったんだけど。
もう一区切りついたんで書き込みやめとくよ。(何が出来て何が出来ないかはわかったという趣旨)
あと>>224さんの'''hoge' 難問ですわ…ご指摘ありがとうございました。

282 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 10:48:27 ]
あーウザかった

283 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 11:00:43 ]
マジキチ

284 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 12:21:32 ]
Javaでも20行未満で書けるレベルの処理だろうに。

285 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 12:31:48 ]
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\



286 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:43:50 ]
マジキチ

287 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:52:53 ]
    /:::::::ヽ____/::::::::ヽ、
   丿 ::.__  .:::::::::::::  __  ::::ヽ_       ,. 、       /   /
  / /。 ヽ_ヽv /: /。ヽ  ::::::ヽ    ,.〃´ヾ.、  /  /
 / / ̄ ̄√___丶  ̄ ̄\  ::::| / |l     ',  / /
 | .:::::::::: / / tーーー|ヽ     ..::::: ::|r'´  ||--‐r、 ',   javaなら20行で書ける!!
 | .:::::.  ..: |    |ヽ   .,..ィ'´     l',  '.j '.    javaなら20行で書ける!!
 | :::    | |⊂ニヽ| |  'r '´         ',.r '´ !|  \
 | :    | |  |:::T::::| !  l!     ....:.:.:.:.:.:ヽ、   ,l    \
 \:    ト--^^^^^┤   ゝ、.,_ ---‐‐‐----ゝ、ノ

288 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:34:41 ]
マジキチ

289 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 15:37:17 ]
>>Javaなら20行でできる
専用スレ立ててやれ

290 名前:デフォルトの名無しさん [2009/08/05(水) 16:35:23 ]
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

291 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 17:57:53 ]
>>289
もう終わった話に一人で何言ってんの?

292 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 18:09:20 ]
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

293 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:40:59 ]
perlで7行スレは盛り上がったのになんだこの流れ

294 名前:デフォルトの名無しさん [2009/08/05(水) 23:51:53 ]
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |

295 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:14:15 ]
正規表現使うんならperlかpythonあたりいくだろ。javaはないわ。



296 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:36:03 ]
正規表現使うのが目的ならな。

297 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:22:39 ]
正規表現使わなくてもjavaなら20行未満で書けるよ。

298 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:53:47 ]
>>297
おい!できるならとっとと書いてみろよ。
逃げんじゃねーぞこの口だけ野郎が!

299 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 14:40:55 ]
>>297
あ?どうしたコラ!
はやくしろよ。
また逃げたのかなw 布団被って泣いているのかな?w

300 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 15:07:24 ]
人にものを頼む態度じゃないな

301 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 15:25:36 ]
ああん?

 「書ける」 とは言ったが 「書く」 とは言ってない。
 書いて欲しかったら頭を下げてお願いしろ。
 それが礼儀だろ。

・・・って言いたいのか?中学生か、おまいは!

302 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 15:41:38 ]
と、小学生みたいな発言している人がいますね

303 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:35:45 ]
で、いつになったら発表してくれるの?>> 20行クン
今なら30行に負けてあげてもいいと言ってるんだし、
そもそも、こっちは行数なんて問題にしてないから
100行だろうが1000行だろうが好きなだけ費やしてもいいんだよ。
早く書いてごらんよ。どうせ書けないんでしょ?
書けもしないのにテキトーなことを言ったんでしょ?

304 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 18:28:46 ]
怒ってもいいことなんてひとつもない。

305 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:07:09 ]
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\



306 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:11:55 ]
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

307 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:54:49 ]

   /         ドッカン
  / /    ,,_     ドッカン
 ━━━━━'), )=         ☆ゴガギーン
      ∧_∧ヽ\         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   ) 〉 〉_ _ ____      ∧_∧ ∠  おらっ!20行で書いてみろ
     / ⌒ ̄ / "'''"'|    ||     (`∀´ )  \___________
      |   | ̄l    |    |/      /     \
.      |    |  |     |    ||      | |   /\ヽ
       |   |  .|     |    |     へ//|  |  | |
      (   |  .|   ロ|ロ   ゙!l''ヽ/,へ \|_  |   | |
       | .lヽ \ |    |   ヽ\/  \_ / ( )
      | .|  〉 .〉    |    |        | |
     / / / / |     |    〈|      | |
     / / / / |     |    ||      | |
    / /  / / └──┴──┘       | |

308 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 02:26:58 ]
ウケるのは最初の一回だけだぞ。


309 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 10:12:05 ]
夏休みが終わるまではこんな調子が続くだろうからいくら言っても無駄だろうね。

310 名前:デフォルトの名無しさん [2009/08/13(木) 17:30:46 ]
なスレ汚し奉りそ

311 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:48:37 ]
置き換えや検索を希望する訳ではないのですが、
[!#-'*-;=?-~]
が一体どういう動きをしているか知りたいです
一応説明では「URL文字にマッチ」となっているのですが、
どこがどのようにしてそれらの文字にマッチするよう働いているのか分かりません
環境は鬼車です

312 名前:311 mailto:sage [2009/08/14(金) 00:06:06 ]
すみません自己解決しました
しばらく調べていたら範囲指定がらみで動いていたということが分かりました
どうもすみません

313 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 19:35:58 ]
●正規表現の使用環境
鬼車

●検索か置換か?
置換

●説明
( から ) までの文字列にマッチ
マッチした文字列中に ABC が含まれている場合は
置換時に ABC を \1 で参照できる正規表現

●対象データ
smp("桁数:" + strABC.length);
smp("行数:" + cnt);

●希望する結果
smp(ABC);
smp();


検索文字列
\([^\)]*?(ABC)?[^\)]*?\)
置換文字列
(\1)
で試してみたのですが、ABCがある行も無い行も全て
smp(); になってしまいました。

どのように記述すればABCを取り出せるのか教えてください。

314 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:48:23 ]
? 付け過ぎ

315 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:25:22 ]
*?(ABC)? の部分が、"何もない" 状態にいきなりマッチするからじゃね?
場合分けの部分を親言語に任せる方が、文字列の否定を使うより楽かもしれない。



316 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:54:46 ]
エディタの置換機能で実現したいので、こうなってます。
.*?の?は、付けておかないと(ABC)?.*?の部分に入ってくれないかと思い付けました。
結果的にマッチしていないので無意味ですが。。。

何か方法はありませんか?

317 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:13:33 ]
3ステップに分ければ簡単だが
(1) smp\(.*(ABC).*\) → xxxxxxxxxxx(\1)
(2) smp\(.*\) → smp()
(3) xxxxxxxxxxx\((.*)\) → smp(\1)

318 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:30:30 ]
ABCがマッチする場合|ABCがマッチしない場合

319 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:59:43 ]
Javaでも20行未満で書けるレベルの処理だろうに。

320 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 23:02:20 ]
正規表現は魔法じゃ無い!

321 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 23:16:18 ]
>>319
またお前か。
エディタ上で使うって言ってるだろ。
何調子乗ってんだ?

322 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 23:18:12 ]
>>319
と言うかその前に、JavaでCSV処理の話はどうなったんだ?
逃げたと思ったらコレだよ。
とっとと書いてみなよ20行君。

いや30行でも100行でもいいからさ。

323 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 07:48:03 ]
この余白はそれを書くには狭すぎる

324 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 13:13:17 ]
鬼車ってなんかエロい

325 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 14:03:04 ]
>>324
kwsk




326 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 14:56:49 ]
>>321
>>322

おいおい、釣りで書いてるだけだろ
なにヒートアップしてんだ


327 名前:デフォルトの名無しさん [2009/08/18(火) 15:00:43 ]
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\

328 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 21:57:51 ]
マジキチ

329 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 23:01:57 ]
お願いします。

●正規表現の使用環境
bash(grepかegrepでお願いします。)

●検索か置換か?
置き換え

●説明
2行を1行にまとめたい。

●対象データ
>
(hogehoge.pampam)

●希望する結果
>(hogehoge.pampam)

ワガママ逝って申し訳ないのですが、
できればgrepだけで出来れば最高です。

330 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 23:19:33 ]
>>329
grepに置換機能はないからムリ。

2行毎につなげるだけだったら、
#!/bin/sh
while read line
do
read line2
echo "$line$line2"
done

でよくない?


331 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:16:07 ]
grepで置き換えとか無理だろ。
Javaなら20行未満で書けるレベルの処理だが。

332 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:35:11 ]
>>331
は? 置換だけならJavaでも10行未満でいけるだろ。
それより20行未満でCSV処理はどうなったのかな?
布団被って泣いてるのかな?w

333 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 04:12:55 ]
まー落ち着けよ。

Javaなら20行未満で書けるレベルの処理で大人気ないな

334 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 04:21:09 ]
とりあえず落ち着きませんか?

Javaなら20秒未満で書けるレベルの処理で大人気ないと思いますよ

335 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 07:14:09 ]
これは落ち着いたほうがいいかもわからんね

Javaなら20%未満のやる気で書けるレベルの処理で大人気ないっていう感想を持つ人もいるだろうし



336 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 08:05:54 ]
以上、正規表現もJavaも全く解らない人たちが大喜びの映像をお届けいたしました。

337 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 08:22:25 ]
Javaなら20行未満で書けるレベルの処理で勝利宣言されてもなあ…

338 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 10:51:23 ]
sedでいいじゃない

339 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 10:58:45 ]
javaでいいじゃない

340 名前:デフォルトの名無しさん [2009/08/20(木) 08:01:32 ]
viで

341 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 10:41:35 ]
javaで書ける、って言うけど
どうせ javaで正規表現を書くんだろ?

 pattern = Pattern.compile("\\([^\\)]*?(ABC)[^\\)]*?\\)");

みたいな。やたら \ が増えまくって、かえって見にくい。
ディレクトリの区切り文字の \ にマッチさせるのに

 pattern = Pattern.compile("\\\\");

って \ を4回も書かなきゃならん。 \ 地獄だ。武○士だ!

342 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 12:05:04 ]
Emacs Lisp の正規表現に比べたら別に大したことない。

343 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 18:33:59 ]
>>341
ん?
\xがエスケープシーケンスになる言語はみんなそうなんじゃないの?

>>342
うむ。


344 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 19:41:20 ]
>>343
文字列から生成する場合に限ればな
正規表現リテラルが存在する言語ならそれに付き合う必要はない

345 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 21:01:57 ]
あーそうだった。忘れてた。thx




346 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 21:19:05 ]
> pattern = Pattern.compile("\\\\");

ワロス
アホすぎるwww

347 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 21:43:56 ]
よし、夏休み最後の一週間はJavaを勉強しちゃうゾ! ><

348 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 20:54:36 ]
>>347
20行係を任ず

349 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 19:53:56 ]
正規表現を使いこなしてる人でも、間違った正規表現を書いちゃうことってよくあるの?

350 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 19:57:39 ]
間違った正規表現すら使いこなすよ

351 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 21:52:56 ]
間違ってる事がわからないから、全部正解

352 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 23:10:06 ]
想定したパターンが間違ってたってことは割とある
単語の文字列にハイフンが含まれることを考慮してなかったり

353 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 22:19:40 ]
>>330
すんません、ありがとうございます。
シェルよくわからんのでしたが、すんごい参考になりました。

おかげでなんとか出来ました。
ありがとうございます。

354 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 00:05:17 ]
日本語版でないですかね

Regular Expressions Cookbook
oreilly.com/catalog/9780596520687/
www.amazon.com/dp/0596520689/

355 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 16:48:49 ]
色々試してみたのですがうまく動かないので教えてください。

●正規表現の使用環境
PHP 5.2.5

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

●説明
絵文字用の文字列変換を考えています。
フォームのテキストエリアに入力された文字列から
##で囲まれた文字列を検索し置換したい。

●対象データ
いい天気ですね##A0F1##!!
(AF01は固定ではないです)

●希望する結果
##AF01##にヒットし、さらにAF01のみに置換したい。

自分が考えた正規表現は /#[2][A-F|0-9]{4}#[2]$/u
ですが、うまく動きません・・どなたかお願いします。



356 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 17:16:28 ]
PHPはよう知らんが

s/##([A-F0-9]{4})##/$1/g

じゃないのか?



357 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 01:11:44 ]
>じゃないのか?
って。
そうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。

358 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 01:12:25 ]
>じゃないのか?
って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。

359 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 10:11:15 ]
いま、ものすごくバカっぽいレスを目にした気がした。

360 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 11:21:38 ]
>どうして質問を質問で返すんだろ。
「質問を質問で返すな」と言い切る自信はないらしい。

361 名前:355 mailto:sage [2009/08/26(水) 11:28:27 ]
>>356
ご返信ありがとうございます。
試してみたのですが、期待した動作にならなかったです。


362 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 12:28:28 ]
>>357
ろくに回答もせず、人のレスに難癖付けるだけ、か…

哀れだな


363 名前:355 mailto:sage [2009/08/26(水) 14:10:51 ]
あれから、色々自分で試行錯誤して

/#{2}([A-F|0-9]{4}#{2})/

でヒットするところまでは持っていけました。
後はなんとかなりそうなので、がんばってみます。
なんだかスレが荒れてしまったみたいで申し訳ありません。

364 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 14:19:43 ]
おかしいのがはりついてるせいだから、あんま気にせず。

365 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 14:26:40 ]
PHPはよう知らんが >>356 のでいけたよ。
# s/.../.../g とかは Perl 特有な演算子なのでそこらへんはよしなに

$str = preg_replace('/##([A-F0-9]{4})##/', '$1', $str);

これでどうですか?



366 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 14:55:40 ]
>これでどうですか?
って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。

367 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 15:17:15 ]
マジレスすると

(?:^|[^#])
##([A-F0-9]{4})##
(?:$|[^#])

368 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 15:28:42 ]
「これでどうですか?」は質問じゃないだろ。

369 名前:367 mailto:sage [2009/08/26(水) 15:54:37 ]
ん?
「####AF01##」のような文字列も置換していいのか。
条件反射してすまなかった。

370 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 16:36:03 ]
/#{2}([A-F|0-9]{4}#{2})/ の縦棒(|)は多分こういう意味では?と予想。

/#{2}([A-F]{2}[0-9]{2})#{2}/

371 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 17:08:01 ]
>>370
「対象データ」の「##A0F1##」にマッチしなさそう、とか。

372 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 17:40:08 ]
>>370
文字クラスの連結のつもりだったとエスパー。


373 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 17:46:50 ]
355です。

>>365
ありがとう!まさにこれが期待した動作です。
Perlに詳しくなかったのでPHP風に直せなかった自分の力不足で
動かなかったなどと言ってすみませんでした。

>>367
####AF01##は##「##AF01##」の部分だけ置換したいと思っています。
##は意味もなく使わせないようにしたいのですが、ユーザーがどういう意図で
使うかはわからない部分もあるのでそうしています。

後は答えていただいた方法をうまく組み込んでみます、ありがとうございました。



374 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 17:51:36 ]
>>372
A-F|0-9はうまい方法が思いつかなかったのでこうしてます。

要するにA-Fまでと0-9までの半角英数字4文字が続いている場合となります。
0CAFの場合もありますし、DA16など4文字は確定で入り乱れている状態です。

これをうまく表現する方法がわからなかったので
調べながら書いてみたら動いたのでとりあえずこれでやってました。

375 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 18:01:24 ]
>>374
[A-F|0-9]は、A-Fか0-9か'|'という意味だ。
つまり[|A-F0-9]や[A-F0-9|]も同じ意味になる。

おまえがやりたいことは[A-F0-9]で出来る。

まだ正規表現に慣れていないみたいだが、
Webアプリ開発では必須のスキルなので
これから勉強していくといい。

まずはフクロウ本を買うところから始めるべし。




376 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 19:23:33 ]
| は ( ) の中で使うときと { } で使うときでは意味が違う。
最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。

377 名前:誤字った mailto:sage [2009/08/26(水) 19:24:20 ]
| は ( ) の中で使うときと [ ] で使うときでは意味が違う。
最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。

378 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 19:38:26 ]
>>377
自己紹介?

379 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 19:40:23 ]
( ) の中ってなに。。

380 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 20:38:26 ]
{}かな。

381 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:33:37 ]
拗音の「ぁぃぅぇぉゃゅょァィゥェォャュョ」と促音の「っ」が複数個連続した場合にSAPI5を使うソフトウェアがハングアップします。
ところが「うわぁぁぁぁ」のような表現は日常的に存在しているためにそのたびにハングアップして閉口してます。
正規表現で小さい文字を大きくすることは可能ですか?


382 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:40:53 ]
ょぅι゛ょ

383 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:54:43 ]
s/ょぅι゛ょ/ 妖女/

384 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:57:31 ]
こすると大きくなるよ

385 名前:デフォルトの名無しさん mailto:sagesage [2009/08/27(木) 00:04:25 ]
こすったら膿出てきた



386 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:18:54 ]
淋しい病気ですか

387 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:32:52 ]
>>386
下手糞なツッコミ
もっと激しく!!

388 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 10:57:46 ]
>>381
s/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/g

389 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 11:01:29 ]
性器表現だけじゃできなそうだな。

390 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 11:20:00 ]
tr/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/

s/ぁ/あ/g
s/ぃ/い/g
s/ぅ/う/g
s/ぇ/え/g
s/ぉ/お/g
s/ゃ/や/g
s/ゅ/ゆ/g
s/ょ/よ/g
s/ゎ/わ/g
s/ァ/ア/g
s/ィ/イ/g
s/ゥ/ウ/g
s/ェ/エ/g
s/ォ/オ/g
s/ヶ/ケ/g
s/ャ/ヤ/g
s/ュ/ユ/g
s/ョ/ヨ/g
s/ヮ/ワ/g

391 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 18:29:07 ]
どうでもいいけどそれは SAPI5 とやらを直すべきではないのか?

392 名前:デフォルトの名無しさん [2009/08/27(木) 19:12:10 ]
マッチするなら電子メールアドレスである事が保証できる
正規表現を教えて下さい

393 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 19:24:33 ]
完全にやるのはひどくおおごとで、
かつルール違反のアドレスが結構ある。

とりあえず使えればいいのであれば、メールアドレス 正規表現 で検索

394 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 19:44:38 ]
DoCoMoもauも、ちょっと前までは連続ドット(RFC違反)の
メールアドレスが普通に作れちゃったから困ったもんだ。

395 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 19:52:12 ]
>>392

まずググる、という発想すらできない君にはこれがお似合いだよ

.+@.+





396 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 21:16:55 ]
>>391
「暗いと不平を言うよりも、すすんで明かりをつけましょう」

397 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 22:41:53 ]
>>395
それじゃあ
> マッチするなら電子メールアドレスである事が保証できる
を満たしてないだろ。

これなら条件を満たすだろ。

[a-z]{6,30}@gmail.com

398 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 23:53:56 ]
こっちの方がいい

[^@]+@gmail.com

399 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 23:58:02 ]
>>397-398
やりがちだよなぁ、\.comとかのエスケープ忘れ
しかもそうそう異常判定が起きないから潜在的なバグになりやすい

400 名前:397 mailto:sage [2009/08/28(金) 00:26:28 ]
>>399
ごめんなさい。反省します。

>>398
それだと「マッチするなら電子メールアドレスであることが保証できる」が満たせないよね。

401 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 00:57:19 ]
命題トリックだな

402 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 01:02:24 ]
連. はイケないとか
"に囲まれてるなら@も連.もおkとか
イカレてるわ

403 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 01:22:04 ]
正規表現だけでなんとかしようって方がイカレてるわ

404 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 09:38:08 ]
到達できないアドレスは電子メールアドレスとして保証されていると言えるの?

405 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:21:25 ]
一般的には言えないかもしれないけど、
そこはこのスレのお題の範疇を超えるんで、気にしなくて良いんじゃないかと思う。



406 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:30:48 ]
俺はKENT氏が使っているこれを利用してるけど

/[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/

407 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:25:52 ]
KENT氏(笑)

408 名前:デフォルトの名無しさん [2009/08/28(金) 13:30:29 ]
KENT氏()笑

409 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:39:48 ]
はいどうぞ ttp://www.din.or.jp/~ohzaki/mail_regex.htm

410 名前:デフォルトの名無しさん [2009/08/28(金) 13:43:16 ]
>>409
うんざりしたw

これはRFCが悪い。

411 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 14:27:48 ]
>>406
これはひどい。
local-partの記号類をまったく受け付けないじゃん。
Gmailの拡張アドレスが弾かれちゃうね。


412 名前:デフォルトの名無しさん [2009/08/28(金) 14:29:02 ]
>>411
「マッチするなら電子メールアドレスである事が保証できる 」
を満たせばおkなんじゃないの?

413 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 14:37:11 ]
極端な話だけど/foo@example\.com/も条件を満たすよ
>>397はそういうジョークだろう


414 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 15:24:14 ]
>>412
そういう意味ならなおさら >>406 はまるでダメでしょ。
電子メールアドレスでないものも余裕でマッチする。

415 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 15:27:38 ]
これはどうなん?

search.cpan.org/~rgarcia/perl-5.10.0-RC1/pod/perlfaq9.pod#How_do_I_check_a_valid_mail_address?



416 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 15:33:15 ]
>>415
ああ、俺もそれ使ってるわ。

日本語の解説はこれな。
ttp://blog.livedoor.jp/dankogai/archives/51189905.html


417 名前:デフォルトの名無しさん [2009/08/28(金) 15:40:45 ]
>>416
そのページにあるリンク先見てて思ったんだが
[.] とか [@] って何の意味があるんだろ。

ときどき目にするんだが。。

418 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:04:50 ]
>>417
[@]はあんまり意味がないと思うけど、[.]は\.を使うよりいい(見やすい?)と、Damian Conway先生が
言ってたような気がする。

419 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:16:48 ]
>>415
そこに書いてある、このモジュールを使えばいいんかな?

RFC::RFC822::Address -- RFC 822 style address validation. - search.cpan.org
search.cpan.org/~abigail/RFC-RFC822-Address-2009040601/lib/RFC/RFC822/Address.pm

420 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:43:24 ]
>>417
[@] は配列が展開されるのを防ぐのかな?

421 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:47:38 ]
>>409
ジョークか?

422 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 21:11:37 ]
Javaでも20行未満で書けるレベルの処理だろうに。

423 名前:デフォルトの名無しさん [2009/08/28(金) 21:23:59 ]
>>422
それもう面白くないよ。

424 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 22:58:46 ]
    /:::::::ヽ____/::::::::ヽ、
   丿 ::.__  .:::::::::::::  __  ::::ヽ_       ,. 、       /   /
  / /。 ヽ_ヽv /: /。ヽ  ::::::ヽ    ,.〃´ヾ.、  /  /
 / / ̄ ̄√___丶  ̄ ̄\  ::::| / |l     ',  / /
 | .:::::::::: / / tーーー|ヽ     ..::::: ::|r'´  ||--‐r、 ',   javaなら20行で書ける!!
 | .:::::.  ..: |    |ヽ   .,..ィ'´     l',  '.j '.    javaなら20行で書ける!!
 | :::    | |⊂ニヽ| |  'r '´         ',.r '´ !|  \
 | :    | |  |:::T::::| !  l!     ....:.:.:.:.:.:ヽ、   ,l    \
 \:    ト--^^^^^┤   ゝ、.,_ ---‐‐‐----ゝ、ノ

425 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 02:27:04 ]
ちなみにJavaなら20行未満で書けるぞ



426 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 07:51:01 ]
\ 地獄ですね

427 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 09:40:01 ]
「全然」が現れてから次の「。」までに「ない」「なく」「なかった」「ません」が来ない文にマッチさせるには?

428 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:41:16 ]
/全然(?!ない|なく|なかった|ません).*。/

429 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 13:23:45 ]
松来未祐と金田朋子のRADIOデコピンないと、ひぐらしのなく頃に、本当にすまなかったと思っている、うちのタマ知りませんか
等もマッチしなくなるよ

430 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 14:01:20 ]
>>429
字面だけで処理しようってんだから、そこまで気にしてやる必要は無いんではないか

431 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:57:51 ]
>>428
"全然勝負にならない。" にマッチしちゃうよ。

432 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:06:53 ]
全然問題ない
全然なくならない

433 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:21:30 ]
>>428
正規表現メモ
www.kt.rim.or.jp/~kbk/regex/regex.html#POSITIVELOOKAHEAD

「よくある勘違い」

434 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:32:27 ]
ツッコまれること前提で片手間に書いたのに、やっとツッコんでもらえたw

/全然(?!.*?(?:ない|なく|なかった|ません)).*?。/
これでどうだ

435 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 02:32:07 ]
キュウリを突っ込んで欲しいのか?
魚肉ソーセージを突っ込んで欲しいのか?



436 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 10:08:55 ]
全然((?!ない|なく|なかった|ません).)*。

437 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 21:27:07 ]
>>434 >>436
検索してみたら「全然参考にならないんだ、悪いけど。」にマッチしてる。

438 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 22:13:55 ]
>>437
Perl と Ruby で試してマッチしないんだけど、どんな正規表現エンジン使ってるの?

439 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 22:25:44 ]
>>437
お前のレス全然参考にならないんだ、悪いけど。

440 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 22:30:23 ]
>>438
これ。内部エンジンがどうなっているのかよく分かんない。
ttp://www.kotonoha.gr.jp/cgi-bin//search_form.cgi?viaTopPage=1

441 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 23:00:44 ]
>>427 = >>440 なのか?
>>1 をよく読んで出直せ。

442 名前:441 mailto:sage [2009/09/01(火) 23:09:11 ]
まあいいや。 >>427 = >>440 と仮定して。

>>440 のをちょっと試してみたけど、
「前後文脈の指定について」の後文脈の例を見るとわかるように、
「検索文字列」の直後のパターンを指定したい場合は、
文字列先頭のアンカを指定する必要があるみたい。
例えば >>436 のを参考にこんなんでいけるかと。

^((?!ない|なく|なかった|ません).)*。

443 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 23:16:52 ]
>>441
ごめんなさい。

>>442
おおお、できた。ありがとう。

444 名前:デフォルトの名無しさん [2009/09/04(金) 13:45:50 ]
お時間あればよろしくおねがいします

●正規表現の使用環境
.NET Framework 2.0
●検索か置換か?
置き換え
●説明
ランダムな文字列内に繰り返す言葉を1つにまとめたい
●対象データ
abcdddddde
こんにちちちちちちわ
!+++**!
●希望する結果
abcde
こんにちわ
!+*!

445 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 14:20:02 ]
>>444
s/(.+?)\1+/$1/g

ドトネトだとこんな感じか

Regex re = new Regex( @"(.+?)\1+" );
Console.WriteLine( re.Replace( "abcdddddde", "$1" ) );



446 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 14:23:20 ]
s/(.)\1+/$1/g
でもいいな

447 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 23:46:35 ]
>>445
ありがとうございます、なるほど・・・
PHPだけで他の言語や正規表現はサッパリで、助かりました

448 名前:デフォルトの名無しさん [2009/09/04(金) 23:55:59 ]
Javaでもやれ

449 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 00:56:44 ]
20行で書けるからな

450 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 09:38:25 ]
PHPでも20行で書けるな

451 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:33:57 ]
●正規表現の使用環境
PCRE7

●検索か置換か?
検索

●説明
HTMLマーク付けされていないURLを探したい

●対象データ
example1.com/ <a href="example2.com/">example2.com/</a> example3.com/

●希望する結果
example1.com/
example3.com/

452 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 19:55:22 ]
「けちなマッチング」ってもっと他の言い方ないの?

453 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 20:54:51 ]
けちなマッチング、という言い方は知らないのだけど、
非欲張りな繰り返しのこと? それとも逆に強欲な繰り返しのこと?

454 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:24:21 ]
最短一致とかいろいろな言い方あるね

455 名前:デフォルトの名無しさん [2009/09/17(木) 13:12:34 ]
●正規表現の使用環境
VBScript

●検索か置換か?
置換

●説明
ソースコードの関数を置換したい

●対象データ
1 FuncA(1,2,3)
2 FuncA(1,FuncB(2,3),4)
3 FuncA(1,"string2,3",4)
4 FuncA(1,2,3):FuncD(1,2,3)

●希望する結果
1 FuncC(3,1,2)
2 FuncC(4,1,FuncB(2,3))
3 FuncC(4,1"string2,3")
4 FuncC(3,1,2):FuncD(1,2,3)
とりあえず対になる()の特定方法が知りたいです・・





456 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:10:43 ]
正規表現以前に、単語単位でFuncA->FuncCを置換したら済む話じゃね?

457 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:59:50 ]
関数の仕様というか引数の順番も変更になってるっぽいからダメそう。

カッコのネストの深さを限定すればあるいは。

458 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 20:26:50 ]
>>455
ネスト数を限定すれば書けるが汚くなるのは言うまでもない。

459 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 09:51:28 ]
perlの正規表現の(?PARNO)みたいに再帰を書けるように
拡張されたのを使えばなんとかなるけどあれを正規表現と
呼んでいいのか激しく疑問w

さらに全く正規表現じゃなくなるが頭に

#define FuncA(x,y,z) FuncD(z,x,y)

を追加してcppに食わせれば一発なんだけどね。

% cat hoge
#define FuncA(x,y,z) FuncC(z,x,y)

1 FuncA(1,2,3)
2 FuncA(1,FuncB(2,3),4)
3 FuncA(1,"string2,3",4)
4 FuncA(1,2,3):FuncD(1,2,3)
% cpp hoge
# 1 "hoge"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "hoge"


1 FuncC(3,1,2)
2 FuncC(4,1,FuncB(2,3))
3 FuncC(4,1,"string2,3")
4 FuncC(3,1,2):FuncD(1,2,3)

460 名前:デフォルトの名無しさん [2009/09/18(金) 13:14:55 ]
スルーされにくい質問のテンプレと例

●正規表現の使用環境
5.10.0

●検索か置換か?
置換

●説明
先頭の<と行末の>を削除したい

●対象データ
<XXXXXX>
XXXXXX>
<XXXXXX

●希望する結果
XXXXXX


461 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:16:46 ]
スルー力を試されているのか?

462 名前:デフォルトの名無しさん [2009/09/18(金) 13:24:16 ]
>461
な、なぜだ…このテンプレつかてるのに。
あ。パールです…

463 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:31:32 ]
> ●正規表現の使用環境
> 5.10.0

言いたいことはわからんでもないが。

464 名前:デフォルトの名無しさん [2009/09/18(金) 13:34:45 ]
>463
Linux 2.6.30.5-43.local.fc11.i686.PAE #1 SMP Wed Sep 16
16:46:32 JST 2009 i686 i686 i386 GNU/Linux

あら勘違いしたかな?これでだいじょぶですか?

465 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:39:08 ]
>>460
しむらー、一行目

/^<?(.*?)>?$/
Perlでは実行確認してないけど多分大丈夫だろ



466 名前:デフォルトの名無しさん [2009/09/18(金) 13:43:34 ]
>465
うわーありがとう。
もーちょっとだったのに汗
助かりました。

467 名前:455 mailto:sage [2009/09/18(金) 14:49:49 ]
簡単には出来なそうなんですね。わかりました。
対になる()や[]の一致書式の方はありますか?
これが出来れば結構いろいろ応用がききそうなんですが。


468 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 15:32:46 ]
厳密な意味での正規表現では無理なことの代表的なものが、括弧の対応。
最近の拡張ではできるものもあるけど、やりかたがそれぞれなので、
一般的に説明できない。

つーかその例のようなのは>>459の言うようにcpp使うのが楽だな。

469 名前:デフォルトの名無しさん [2009/09/18(金) 18:48:14 ]
「正規」表現って言い方ってどうよ?

正規分布 normal distribution
正規表現 regular expression


470 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:22:31 ]
別に?

混乱するからどうしてもと言うなら
統計学のnormalを「標準」とでも脳内変換しとけ

471 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:03:18 ]
>>469
何が問題なの?
異なる言語で単語が一対一に写像するなんてことは有り得ないんで、
その程度の不整合でいちいち悩んでると人生辛くなるよ。

472 名前:455 mailto:sage [2009/09/18(金) 22:35:18 ]
括弧処理には向いていないのでしたか。
それがわかっただけでも満足です。ありがとう。

473 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:05:45 ]
>>181
これ読んでみたけど本当に良い本だった。世界的に認められてるだけのことはある。
数学丸出しなのでかなり難しい内容だけど、オライリーのフクロウ本を一通り読んで
DFAとNFAの違いを知りたいというモチベーションがあれば読み進められるかも。

474 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:16:09 ]
/ヽ(´ー`)人(´∇`)人(`Д´)ノ/

475 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 20:12:29 ]
カッコの対応を見つけるのって無理なのか・・・。意外だった。



476 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:36:59 ]
C#の正規表現で悩んでいます。
お時間あればよろしくおねがいします

●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
()の文字を取り除きたい
●対象データ
W(ジョーカー)
W(ルナ)
●希望する結果
W
W

string Title = "W(ジョーカー)";
string nobrackets = "<title>(.*)";
Regex re = new Regex(nobrackets);
Match m = re.Match(Title);
Title = m.Groups["title"].Value;

で、nullなんです。アドバイス乞う…。


477 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 22:15:26 ]
(1)あんまり弄らなかった方
string Title = "W(ジョーカー)";
string nobrackets = @"(?<title>W)\(.*\)";
Regex re = new Regex(nobrackets);
Match m = re.Match(Title);
Title = m.Groups["title"].Value;

(2)ちょっと弄ってみた方
string Title = "W(ジョーカー)";
string nobrackets = @"\(.*\)";
Regex re = new Regex(nobrackets);
Title = re.Replace(Title, "");

>>476
何がしたいのかをもうちょっと良く考えてみるといい

478 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 22:15:26 ]
本当に取り除くだけでいいのなら、こんな感じ?
Title = Regex.Replace(Title, @"\(.*?\)", "");

479 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 22:52:03 ]
thanks!

480 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 11:17:01 ]
C#の正規表現で質問です。
●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
ホームページのすべてのタグを取り除きたい
●対象データ
www.asahi.com/shopping/pc_camera/special/TKY200909240072.html
●希望する結果
プレーンテキスト
●現状
');
document.write('');
//-->
などいくつかのタグが残る状況です。
●いま書いている正規表現
Regex regex = new Regex("<.*?>", RegexOptions.Singleline);
html = regexRemoveAllTag.Replace(html,"");


481 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 11:35:31 ]
>>480
「いま書いている正規表現」の処理の前段で <script>...</script> を削除すると良いと思われ。

482 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:14:56 ]
早速ありがとうございます。
html = Regex.Replace(html, "<script>.*</script>", "");
Regex regex = new Regex("<.*?>", RegexOptions.Singleline);
html = regexRemoveAllTag.Replace(html,"");
としてみましたが、状況に変化なしです。


483 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:56:40 ]
えーと、前段の方は <script.*[^>]>.*?</script> みたいな感じで Multiline で。

484 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 13:02:57 ]
>>480
何でそうなるかの原因を考えよう。
想定と違う動きをした箇所を比較してみるといい。
document.write('ipt>');
といった、JavaScript内で閉じタグを記述してる箇所に正規表現がひっかかって');が残る。
だから481は<script type= .... </script>を先に除去すればいい、って言ってるのでしょう。

485 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 13:44:24 ]
> html = Regex.Replace(html, "<script>.*</script>", "");
なんでこっちだけRegex.Replaceなんだ?

たぶん、これでいいんじゃないかな
Regex regex1 = new Regex("<script>.*?</script>", RegexOptions.Singleline);
Regex regex2 = new Regex("<noscript>.*?</script>", RegexOptions.Singleline);
Regex regex3 = new Regex("<.*?>", RegexOptions.Singleline);
html = regex1.Replace(html,"");
html = regex2.Replace(html,"");
html = regex3.Replace(html,"");



486 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:34:41 ]
みなさん、ありがとうございます。
>>485
これがいちばんいけそうです。
www.asahi.com/showbiz/stage/spotlight/OSK200909250086.html
をやってみたら、まだ下のほうにだいぶタグが残るのですが…。

>>484
考えながらやってみてはいるのですが、のこったタグの原因はほとんど判読不明…。
たとえば、
impAserver = "imp.asahi.com";
が残るのですが…。

>>483
実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。


487 名前:484 mailto:sage [2009/09/25(金) 19:22:18 ]
>>486
ほんとに考えてるのかなあ……。
<script>だと<script type="text/.... って書いてあるのに引っかからないわけですよ。

var wc = new WebClient() { Encoding = Encoding.GetEncoding("EUC-JP") };
var html = wc.DownloadString("www.asahi.com/showbiz/stage/spotlight/OSK200909250086.html ");
var result = Regex.Replace(html, "<script.*?</script>", "",RegexOptions.Singleline);
result = Regex.Replace(result, "<.*?>", "", RegexOptions.Singleline);
Console.WriteLine(result);

488 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:10:55 ]
考えてない、考えてない・・・
他人の書いたのをコピーしてるだけ。

489 名前:483 mailto:sage [2009/09/26(土) 02:30:20 ]
>>486
> 実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。
率とかそんなんじゃなくてさあ、 HTML のソース見て考えてる?
もうめんどくせえなあ。

490 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 00:50:56 ]
>>486
えーと、差分を見る方法を用意してる?
処理前と処理後を比較すれば、どこが除去されたのか
すぐ分かるはずなんだけど。

windiffとかWinMergeでも使え。

491 名前:デフォルトの名無しさん [2009/10/01(木) 07:09:09 ]
わかりました

492 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 07:11:38 ]
HTMLのサニタイゼーションに正規表現を使うなと……

493 名前:デフォルトの名無しさん [2009/10/01(木) 13:32:47 ]
先頭の改行(LF)を削除するにはどうすればいいのでしょうか?
$text =~ s/^\n//s; では削除されませんでした。

494 名前:493 [2009/10/01(木) 13:38:11 ]
あ、されてました。
2つ改行がありました。

2つの改行を削除するには、/^\n\n//では削除されませんでした。

495 名前:493 [2009/10/01(木) 13:42:36 ]
あれ?
これは改行じゃないのかもしれない。
なんかあります。
$textの先頭に改行される何かがあります。
CRLF、CR、LFのいずれもないのに、改行される何かがあるんです。



496 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 13:46:00 ]
BOMか?

497 名前:493 [2009/10/01(木) 13:56:53 ]
>>496
BOMじゃないですが、UTF-8です。

498 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 14:02:12 ]
コード16進で表示すると何が出る?

499 名前:493 [2009/10/01(木) 14:03:40 ]
/^\n//をやった直後に/^.//で最初の得体も知れない改行を削除しますと、◆の中に?がある文字が2つ出ました。
しかも、次の文字が消滅しました。

500 名前:493 [2009/10/01(木) 14:06:35 ]
>>498
16進数での開き方を調べます。

501 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 14:08:20 ]
楽しそうだな。これを機会にコンピュータ上で文字はどのように
表現されているのか勉強するといいと思うよ。

502 名前:493 [2009/10/01(木) 14:16:26 ]
バイナリエディタで開いてみました。
その不気味な改行の部分は、EF BB BF 0D 0A E3でした。
この正体は何なのでしょうか?

>>501
勉強がんばってみます。

503 名前:493 [2009/10/01(木) 14:23:57 ]
EF BB BFってどうやらBOMですね。
何とかしてみます。

504 名前:493 [2009/10/01(木) 14:26:08 ]
でも出力されたテキストをメモ帳で保存したからBOMが付いたのかも知れませんね。
よく分かりませんね。

505 名前:493 [2009/10/01(木) 14:39:43 ]
すみません。
全てはポックンのミスでした。
改行コード消した後に、改行コード付加してました。
BOMとか関係ありませんでした。
BOMはメモ帳で開いたから付加されただけでした。
0D 0AはCRLFの改行コードでした。
本当にありがとうございました。



506 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:21:12 ]
>>455
勉強がてら、ActivePerl 5.8.8で作ってみた。
色々調べて、いい勉強になった。

my $re1 = qr/(?:[^(),]+|"(?>(?:(?>[^"\\]+)|\\.)*)")*/;
our $re2 = qr/\w+\((?:(??{$re1}),?|(??{$::re2}))*\)/;

my @s = qw{
FuncA(1,2,3)
FuncA(1,FuncB(2,3),4)
FuncA(1,"string2,3",4)
FuncA(1,2,3):FuncD(1,2,3)
FuncA(1,FuncB(2,FuncC(3,"4),(5"),"\","),6)
};

for (@s) {
print "$_\n";
s/FuncA\(($re1|$re2),($re1|$re2),($re1|$re2)\)/FuncC($3,$1,$2)/;
print "$_\n\n";
}

507 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:48:11 ]
VB.NETの正規表現で質問です。
●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
2行以上の連続した空の行(全角、半角スペースのみの行、または改行のみの行)を2行にしたい。
(1行の空の行は1行のまま、2行の空の行は2行のまま)
●対象データ
AAA

BBB



CCC
●希望する結果
AAA

BBB


CCC
●現状

●いま書いている正規表現
Dim r As Regex = New Regex("<.*?>", RegexOptions.Multiline)

よろしくお願いします。

508 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:31:35 ]
その「いま書いている正規表現」ってのは何を思って書いたの

509 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:20:24 ]
<.*?>  
・・・これは・・・。

510 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:28:14 ]
"3行以上"の"空白行"を最長一致させて、それを2行の空白行に置換すれば良いんじゃない?
今確認出来る環境じゃないんで、適当に書くけども。

([  ]*/n){3}  →  /n/n  に置換。

こんなイメージでどう?スペース入ってるけど、投稿すると消えるとおもう。

511 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:32:25 ]
\n\n\n\nが\n\n\nにならないか?つーかスラッシュ?

((\s| )*\n){2,}

512 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:51:11 ]
4から3にはならん
半分になるだろ

513 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:01:20 ]
え、globalフラグなくてwhlieループとかなの?

514 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:55:11 ]
{3,} なら3以上になるか。

515 名前:デフォルトの名無しさん mailto:sage507 [2009/10/12(月) 22:03:19 ]
レスありがとうございます。
([  ]*\n){3,}
((\s| )*\n){3,}

これで出来そうですね。/は自分の環境の場合\に直します。
[ ]と( )の違いも試してみます。
ありがとうございました。



516 名前:デフォルトの名無しさん [2009/10/14(水) 00:43:45 ]
とんちんかんなのかも知れんが、質問させてくださいな。
.NETの正規表現で"abc"という文字列を一回のreplaseで"b"にする方法はありますか?

517 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 01:28:02 ]
>>516
>>4
つーか例は数個出してくれ
一個だけだと「/abc/を"b"に置換すればいい」とか言われても文句言えないぞ

518 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 01:37:17 ]
途中から丁寧語になるレスを最近よく見かけるんだが、
流行っているのでしょうか?

519 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 02:02:46 ]
随分語弊があった。すまんね。

環境:
.NET
目的:
置換
説明:
特定の連続しない2つの文字列を取り除く
対象データ:
ACB
ADCB
AECDB
結果:
C
DC
ECD

520 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 02:29:11 ]
説明と例がちぐはぐな件
例に倣って、文頭と文末を一文字ずつ省けばいいのか?
それとも説明に則るとして、特定の文字列がAとBならACBCBはどうなるんだ?

521 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 03:17:30 ]
>>519
AとBをそれぞれ取り除くだけじゃん。
正規表現の必要な話か?

522 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 13:02:14 ]
[0-9]?[0-9]:[0-9][0-9]J(am|pm)

詳説正規表現の3版を読んでいるのですが
時刻にマッチさせる表現の例として、上のような正規表現が
書かれています。

このJというは、なんですか?誤植かと思って、ネットで正誤表を見てみましたが
誤植ではないみたいです。Jでやると、時刻にマッチしません。やっぱり誤植ですか?
何か意味があるのでしょうか?

523 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:12:48 ]
誤植だと思う。
オライリーにメールすれ。

524 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:43:05 ]
3版の正誤表ってどこにあるの?

525 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:47:48 ]
どもです。
2版の正誤表で確認しました。3版の正誤表はないっぽいですね。




526 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:49:05 ]
ズコー

527 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:58:21 ]
グーグルブックスで、第2版が閲覧出来ました。
問題の箇所を見てみますと、「J」は書かれていないです。
P20の四角でかこわれた解答の部分で
手元の3版では、+SIZEJ*=と書かれています。

>>522で質問した正規表現はP25にかかれていますが
グーグルブックスでは閲覧出来ないページとなっています。

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

528 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 19:25:53 ]
初版は
「[0-9]?[0-9]:[0-9][0-9]●(am|pm)」
こんな表現。
●は、60%網点の丸。

529 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 21:11:01 ]
「●は、60%網点の丸」は、確かふくろう本では空白を見やすくするための記法でしたね。

530 名前:デフォルトの名無しさん [2009/10/23(金) 10:12:47 ]
正規表現をつかって
ある原稿の
文末から10文字を抽出しろ。と課題がでたのですが
どうしたらできるでのしょうか

531 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:20:36 ]
課題なら自分で考えろよ

532 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:21:54 ]
文末に密着した任意の文字10個の正規表現でマッチさせればできるだろ
宿題は自分でやれ

533 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:26:17 ]
文末が文章の終わりなのか、文の終わりなのか分からないが……

.{10}$

534 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 11:01:52 ]
ワードの文章の文末表現を10文字程度抽出して分類せよ、という問題でした。


申し訳ないのですが本当によくわからないので、
検索する文字列、置換後文字列それぞれにどう入力したらいいのか教えてくれませんか。

535 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 11:22:26 ]
ワードwww

あれ正規表現じゃなかったような
ヘルプ見るかぐぐれ、それでもわからないならあきらめろマジで



536 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 11:35:34 ]
いやだからさ
課題ってのは自分で考えてやらないと意味ないでしょ?
ここで答え教えて貰ってそれ提出すればそれでいいと思ってるの?

537 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:02:34 ]
「オプション」「ワイルドカードを使用する」
「??????????。」

538 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:05:07 ]
>>537
>>536みたいな文章の文末が判定できませんやりなおし

539 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:14:36 ]
??????????[。??]

540 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:38:32 ]
ワードの文章、抽出して分類…ワードのスレで聞いたら?

541 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:50:48 ]
甘やかすな
課題は自分で考えさせるべきだ

542 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 13:23:10 ]
抽出するなら、VBAの知識が必要かもな

543 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 08:54:18 ]
VBSのregexpを呼び出して使う感じかなぁ。

544 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:37:03 ]
特定の1文字をグループで取り出し、その1文字を後方参照で否定で使いたいのですが、
うまくいきません。つまり[^\1]がうまく動作しません(構文エラーにはならないのですが)。
おそらく\1は1文字でなく文字列なので文字クラスの中で使えないのだと思いますが、
では\1を否定で使うにはどうしたらいいですか。(!\1)なんてありませんよね。

545 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:48:08 ]
>>544
>>1

まず処理系を明示しろ



546 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:48:50 ]
ものによるけど否定先読みでどうにかならん?

547 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:00:29 ]
perlなら

/(.)(?!\1)./

でいけたよ。

548 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:09:38 ]
●正規表現の使用環境
VB.NET

●検索か置換か?
検索

●説明
htmlタグの外にある文字を取得したい

●対象データ
<hoge hoge hoge hoge>
<hoge>
<hoge>
<hoge hoge hoge>
あいうえお
<hoge hoge>
<hoge hoge hoge hoge hoge>

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

対象のデータの中にはタグの外の文字列は1箇所(1行)しかありません。
何行目にあるかは不明です。

お願い致します。


549 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:24:47 ]
>>548
説明からするとサンプルのようにきれいに揃っていそうだし
"<"で始まらない行を抽出(もしくは始まる行を削除)で十分かもしれない

VB.netは知らないから具体例はパス

550 名前:544 mailto:sage [2009/10/27(火) 02:03:55 ]
すみません。処理系はC#です。
否定先読みという機能を勉強したところ、C#の正規表現にも先読みは
あったので、これで実現することができました。ご教授有難うございました

551 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 11:23:38 ]
javascript

抽出

1回では難しそうなので2回に分けてやっているのですが
str=str.match(処理1)
str=str.match(処理2)
とやるとうまくいきません
下がないと処理1はできます
このやり方では何か問題があるのでしょうか?



552 名前:551 mailto:sage [2009/11/01(日) 15:39:34 ]
一応自己解決しました
過去のスクリプトを見直していたところ
matchで検索してからsubstringで抜き出していて
試したところうまくいきました
どうも失礼しました



553 名前:デフォルトの名無しさん [2009/11/03(火) 13:13:35 ]
おめでとう

554 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 01:43:16 ]
●正規表現の使用環境
秀丸

●検索か置換か?
置換

●説明
文字列Higを含むが、Highでない文字列を置換

●対象データ
Hig123
HigABC
HighScore

●希望する結果
Hig123
^^^
HigABC
^^^
HighScore


お願いします。

555 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 01:52:43 ]
マッチ部分はHigだけでいいの?
Hig(?!h)



556 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:09:08 ]
できました、ありがとうございます。

理解できないところがあるので、迷惑でなければ教えてください。

?の効果は、直前のパターンが0回または1回です。
しかし、直前の文字は記号なのでエラーになるように見えます。
現に*や+ではエラーになります。
?はどんな動作をしているのでしょうか?

557 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:22:40 ]
>>555のこと?
(?!pettern)は否定先読みという構文で、その?とは異なる意味

558 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:27:13 ]
555のこと言ってるんなら?じゃなくて
(?!expression) 後方不一致指定でしょ

559 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:29:26 ]
理解できました。
ありがとうございます。

560 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 23:04:00 ]
PHP5で文字コードはEUCです。
全角半角が混ざった文字列の中から、@******という部分を取り出したいと思っています。
・@の前にはどんな文字があってもいい
・******は半角英数とアンダーバー(_)が使える
・******の後ろにスペースか全角文字かアットマーク(@)が付いたら終わり
という条件で取り出したいのですが、うまくいきません。
@\w+[^ ][\x01-\x7E]
では無理でした。
どのような式を書けばいいのでしょうか?

561 名前:560 mailto:sage [2009/11/08(日) 23:10:48 ]
具体的には、

こんにちは@Abc_123@Def_456 今日はいい天気

を、

こんにちは[hoge][hoge]今日はいい天気

に置換したいって事です

562 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:21:51 ]
>>560
@[_\w]+
でいいんじゃない?


563 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 02:50:08 ]
>>562
\w には _ も含まれてるとおも。

564 名前:560 mailto:sage [2009/11/09(月) 17:24:29 ]
>>562
>>563
ありがとうございます。@[\w]+で出来ました。
まだまだ正規表現は初心者ですが、流石にこれが出来ないのは情けない・・・・・・・

565 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:26:42 ]
@\w+

でおk



566 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:08:14 ]
●正規表現の使用環境
VB.NET
●検索か置換か?
検索
●説明
拡張子をtxt,jpg,gifなど複数の種類を指定してURLを検索したい
●対象データ
http:****/****/****/12345.jpg
http:****/****/****/12345.exe
http:****/****/****/12345.gif
http:****/****/****/12345.txt
http:****/****/****/12345.bmp
●希望する結果
http:****/****/****/12345.jpg
http:****/****/****/12345.gif
http:****/****/****/12345.txt
現在
[\w\d/%#$&?()~_.=+-]+\.jpg
jpgの場合は上記のように書いてありますが、別の拡張子を追加していくにはどうやって書けばよいでしょうか?
[\w\d/%#$&?()~_.=+-]+\.jpg|gif
だと、
http:****/****/****/12345.jpg と
g
にヒットするのですが、[jpg|gif] [(jpg)|(gif)]やURLの部分をカッコで囲んだりしてみましたがだめみたいです。
[\w\d/%#$&?()~_.=+-]+\.jpg|[\w\d/%#$&?()~_.=+-]+\.gif ・・・・・・・
と書けば良いのですが、長くなってしまいます。
拡張子だけを書き足す方法があれば教えていただけないでしょうか。


567 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:17:11 ]
\.(jpg|gif)

568 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:24:08 ]
できましたー
ありがとう。
でもこれ試した気がしたんだが・・・

569 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 07:24:52 ]
性器表現

570 名前:デフォルトの名無しさん mailto:sega [2009/11/12(木) 22:18:10 ]
$hoge = "0123456789ABCDEF012";
$hoge =~ s/.*?([0-9A-F]{16}).*?/$1/i;
print $hoge;

とにかく16進ぽい文字列を16文字で切り出したいので
上みたいに書いたんだけど、切り出せません。
どこが間違ってるかわからないので助けて

571 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 22:42:35 ]
$hoge = "0123456789ABCDEF012";
$hoge =~ /([[:xdigit:]]{16})/;
print $1, "\n";

572 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 22:43:43 ]
$hoge = "0123456789ABCDEF012";
$hoge =~ s/.*?([0-9A-F]{16}).*?//i;
print $hoge;
print $1;
としてみりゃ原因わかるんじゃね?

?外して文頭文末明示すればおk

573 名前:デフォルトの名無しさん [2009/11/14(土) 17:16:59 ]
「秀丸エディタ」の正規表現の置換がうまくいきません。

作業内容は、
(1)Excelで作成した表を、タブ区切りのテキストデータとして保存し、
(2)「秀丸エディタ」でそのテキストデータを開き、
^(先頭文字)⇒¥t¥t¥t
に全置換しようとしました。

もともとテキストデータであったファイルを置換するときはうまくいきますが、
Excelからエクスポートしたテキストデータは、先頭行を認識してくれないのでしょうか。
どうすれば、先頭行を置換できるでしょうか。

よろしくお願いいたします。

574 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 01:24:50 ]
先頭文字なのか
先頭行なのか
どっちかハッキリしろ


575 名前:デフォルトの名無しさん [2009/11/15(日) 10:10:28 ]
>>574
先頭文字です。
Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。



576 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:33:20 ]
マルチラインの問題とみた。
マルチライン有効になってる?

577 名前:デフォルトの名無しさん [2009/11/16(月) 00:48:19 ]
>>576
ありがとうございます。
マルチラインの設定は秀丸側の設定ですか?
それともExcelでしょうか?
初心者ですみません。
早く秀丸を使いこなさないと、ソース書くときに便利なのにもったいないですね。

578 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:20:02 ]
>>577
そんなのどんな初心者でも人間なんだから
「マルチライン 秀丸」と「マルチライン Excel」で検索かけたり、設定見れば大体予想は付くと思うが、
少しは自分の手、動かした方がいいぞ、反感買うから

579 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:27:26 ]
パソコン買ったら最初に覚えること。
それは
     検索
だ!

580 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:28:49 ]
まさか、「□正規表現(R)」 をチェックしてないとかいうオチじゃないだろうな

581 名前:デフォルトの名無しさん [2009/11/19(木) 07:06:23 ]
>>577です。
皆さんありがとうございます。
マルチライン、秀丸、excel、テキストなどで検索したのですが、
どこでマルチラインの有効無効をセットできるのか分かりません。
エクセルの各々のセルは、セル内改行を認めていません。
教えていただけないでしょうか。
よろしくお願いいたします。


582 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 07:43:49 ]
>>575
> Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。

>>580は?

583 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 07:45:52 ]
念のために書いておくと
置換の時に出てくるダイアログに>>580のチェックボックスがある

584 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 09:31:15 ]
任意の1文字(なくてもOK)ってのはどうやるの?
「.*」だと文字数制限ないし...

585 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 09:43:31 ]
一般的には(|.)かな。perl互換なら.?



586 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 09:47:17 ]
.+

587 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:06:15 ]
改行と空白(全角&半角)以外すべての文字って一気には表現できない?

588 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:42:56 ]
[^\n\s]+
改行またはホワイトスペース(半角スペースとTAB含む)以外の1文字
(改行もホワイトスペースだから複数行対象のときは\n不要かもね)

[^\n\s ]+
全角スペースは文字コードにもよると思うので処理系依存かな

589 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:44:49 ]
>>584

.?

590 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:22:54 ]
>>587
なんで >>1 を読まないかな?

591 名前:デフォルトの名無しさん [2009/11/21(土) 08:57:37 ]
>>583
そこはチェックを入れています。
別のcsvで試したら、1行目のタイトル行だけ先頭行を認識し、2行目からのデータ行の先頭行は認識しませんでした
(T_T)。

592 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:31:53 ]
だから、マルチラインがtrueになってないんだろ。

593 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:37:18 ]
どうもやりたいことがよくわからんな

594 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:55:04 ]
困ってるという割にのんびりしてるな

そういう独自の用語じゃなくて
どういうデータをどうしたいのか具体的に書いて
秀丸スレでもう一度聞いたほうがマシな気がする

595 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:51:27 ]
マルチラインが無効になってりゃ、改行記号が無視されるんだから、
先頭以外の改行は改行とみなされないんだよ。

だから2行目以降の先頭は、先頭とみなされていない。
改行記号に続く文字列って事。
改行記号を改行記号として認識させるのがマルチライン。

マルチライン問題じゃなかったらお手上げ。



596 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:08:48 ]
せめて >4のテンプレ埋めるくらいはしてくれんと。
Excel、秀丸共に現役バージョンが混在してるソフトなんだし
環境晒しもせず、できませんできません言われてもどうしようもない

WinXPSP3 / Excel 2002(Office XP) SP3 / 秀丸8β25 (HMJRE V2.06)
とりあえず↑の環境では
・Excelコピー→秀丸へペースト
・名前を付けて保存:テキスト(タブ区切り)→秀丸で開く
のどちらでも問題なくできたよ。

597 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 12:28:52 ]
マルチライン、マルチラインって言ってるヤツ、バカじゃねぇの?

598 名前:デフォルトの名無しさん [2009/11/21(土) 14:49:56 ]
●正規表現の使用環境
Java1.6

●検索か置換か?
検索

●説明
雑多な文字列からスラッシュで終わるURLを抽出したい

●対象データ
今日はabcd.efgh/abc/でご飯を食べました
そしたら12345/abc/index.htmlなスープが出てきてビックリ
おまけにaiueo/test/xxx.imgこんなデザートまで

●希望する結果
abcd.efgh/abc/


599 名前:598 [2009/11/21(土) 15:27:20 ]
●パターン
(|https://){1}[\w\_\.\-/:\#\?\=\&\;\%\~\+]+/[^A-Za-z0-9\_\.\-/:\#\?\=\&\;\%\~]

●結果
abcd.efgh/abc/


最後に一文字付いてしまいます
どうやって付かないようにすれば良いでしょうか

600 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 17:14:20 ]
否定の先読み使え

601 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 03:17:06 ]
2 文字目以降にマッチする正規表現はどのように記述したら良いですか?
例えば "abcXdXefgXXhij" という文字列の、2番目以降全ての "X" にマッチするようなものです。
基本的そうなのですが、ちっとも思いつきませんでした。

602 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 09:13:58 ]
2文字目以降ってのが何を指してるのかわからんな。
その例だとどれにマッチすればいいんだ?

603 名前:601 [2009/11/24(火) 09:43:31 ]
>>602

すいません、いろいろ書き忘れてました。
こんな感じです。

- 使用環境: AutoHotkey 1.0.48
- 使用法: 検索
- 説明: 下記にある文字 X を、最初だけ残して残りを Y に置換したい

"abcXdXefgXXhij" -> "abcXdYefgYYhij"


604 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 09:55:19 ]
AutoHotKeyならRegExReplaceで開始位置を指定できるので、
最初のXの次の文字からにすりゃいいんじゃねーの?

605 名前:601 mailto:same [2009/11/24(火) 10:14:23 ]
>>604
そうでした、ありがとうございます。
こんな感じでできました。

RegExReplace(str, "X", "Y", temp, -1, InStr(str, "X") + 1)



606 名前:デフォルトの名無しさん mailto:sega [2009/11/24(火) 19:44:10 ]
IPv6かどうかを調べる正規表現ってどこかにサンプルある?

607 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 21:06:46 ]
IPv6 regex でググってみるとか

608 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 00:47:05 ]
IPv6 アドレスの形式チェックを正規表現でやる香具師は池沼。
getaddrinfo(3) を使え。

ってうちのじっちゃんが言ってた。

609 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 08:59:16 ]
>>608
inet_ptonだろ

610 名前:606 mailto:sage [2009/11/26(木) 09:39:14 ]
>>608
JavaScriptとか使って入力段階で一旦弾きたいんですだよ。
サーバ側ではinet_ptonなりなんなり別の手段で再チェックするけど。

611 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 09:47:28 ]
>>610
はやくぐぐれよ

www.google.co.jp/codesearch?q=IPv6+regex

612 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:42:06 ]
>>608
いのなかのかわず

613 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:47:57 ]
鬼車でひいひい言わせてやるよ

614 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 23:51:33 ]
>>609
inet_pton(3) のことは綺麗さっぱり忘れろ。

ってうちの itojun が言ってた。

615 名前:デフォルトの名無しさん [2009/11/27(金) 11:50:16 ]
●正規表現の使用環境
perl5

●検索か置換か?
検索

●説明
クォーテーションに囲まれた(省略可)の文字列を取得したい。

●対象データ
"aaa":'bbb':`ccc`:ddd:eee:666:777:888:999:000:111

●希望する結果
$1:aaa
$2:bbb
$3:ccc
$4:ddd
$5:eee
$6:666
$7:777
$8:888
$9:999
$10:000
$11:111

(["'`]*)([^\1]*)\1):(["'`]*)([^\2]*)\2):(["'`]*)([^\2]*)\2)の形式で、
後方参照が一桁の時はうまく行くんですが、二桁になると不具合がおきます。

(["'`]*)([^\10]*)\10)
\10の下一桁に該当する文字(0)があるとマッチしません。
原因は[^\10]の部分が「\10以外」ではなく「\1と0以外」と解釈される為では
ないかと思いますが、回避する記述方法はありますか?。



616 名前:デフォルトの名無しさん [2009/11/27(金) 12:02:52 ]
失礼しました。

(["'`]?)([^\1]*)\1:(["'`]?)([^\3]*)\3:(["'`]?)([^\5]*)\5
(["'`]?)([^\11]*)\11)

$2:aaa
$4:bbb
$6:ccc
$8:ddd
$10:eee
$12:666
$14:777
$16:888
$18:999
$20:000
$22:111

でしたm(__)m。

617 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 13:26:38 ]
そもそも文字クラス中で\1とかは使えない罠。
[^\1]は文字コードが1の文字以外に解釈されて
いると思われる。

print "match1\n" if 'aa' =~ /(.)[^\1]/;
print "match2\n" if "a\001" =~ /(.)[^\1]/;
print "match3\n" if 'ab' =~ /(.)[^\1]/;

618 名前:デフォルトの名無しさん [2009/11/27(金) 13:49:45 ]
1と3だけマッチしますね。「(後方参照としての)\1と0以外」と
解釈される為でも無いということですね。

確かに下一桁が該当する場合に必ず一致しないということでも
なかったので、原因がわからず苦しんでました。ありがとうございます。

^を使用して簡潔に「(二桁で指定する)後方参照の文字を含まない
文字列」は表現できないものでしょうか。

619 名前:デフォルトの名無しさん [2009/11/27(金) 14:47:01 ]
クラスの中で使えないということは^で「以外」を
表現することも出来ないということですね…。

perl5なんで(?!regexp) が使えるのかな。



620 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 15:01:37 ]
クォーテーションに使った文字以外と書きたくなるのはわかるが、
正規表現では書きにくいので最小マッチ.*?でいいんじゃね?

621 名前:デフォルトの名無しさん [2009/11/27(金) 15:16:04 ]
最小マッチだと文字間の区切り記号「:」を含む文字列を指定できないんです。
説明不足でした。

●対象データ
"aaa":bbb:"c:c"

●希望する結果
変数1「aaa」
変数2「bbb」
変数3「c:c」
としてマッチさせたいんですが…。

622 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 23:19:02 ]
/\G(["'`])(.*?)\1(:|$)/

623 名前:デフォルトの名無しさん [2009/11/28(土) 00:53:45 ]
実現できました。ありがとう御座いましたm(__)m。

文字列数は固定なのと、クォーテーションは
その文字列内で使わなければ省略できる形が
望ましかったので以下の形にして無事動作しました。

/(?:("?|'|`)(.*?)\1):(?:("?|'|`)(.*?)\3):(?:("?|'|`)(.*?)\5)$/

\Gは始めて知りました。奥深くて理解が追いついてませんが、
勉強したいと思います。

初歩的で恥ずかしいのですが、クォーテーション部分の記述って
「"」または「'」または「`」または「入力なし」を表わすものとして

"?|'|` で正しいのでしょうか

それとも ["'`]? とか他に記述法があるのでしょうか。

624 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 01:29:40 ]
訂正 "?|'|`では正常に判定されませんでしたm(__)m。


625 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 13:29:56 ]
"a1a2" =~ /([a-z][0-9])+/
p $1
p $2

これで$1に"a1" $2に"a2"になるようには出来ませんか?
"a1a2" =~ /([a-z][0-9])([a-z][0-9])/
コレなら行くんですが・・・



626 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 13:36:41 ]


627 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 15:03:10 ]
エスパー的にはscan使えでよさげ

628 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:56:11 ]
正規表現を学習したいのですが、自分の県には何処に行っても正規表現の本が辞典(リファレンス)以外売っていません
何か段階的に学習出来るお勧めの書物はないでしょうか?


629 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:57:28 ]
とりあえずふくろう本

630 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:45:57 ]
>>628
629さんも言ってる通り、正規表現の本はオライリーのフクロウしか選択肢が無いかも。

あとはネットで勉強すると良いかも。
パターンを何回自分で作ったかによるところが多いから、
PHPチェッカーで作りつつ勉強して、正規表現パズルで息抜きして。
って感じで、フクロウと併用するといいかも。

631 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:07:32 ]
体で覚えるのも一つの方法だな。
オレみたいに頭の弱いヤツなら。
正規表現検索機能つきのテキストエディタで試行錯誤してれば
すぐに覚えられるよ。
unix の ed とか、まるで「正規表現養成ギブス」だもんな。

632 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:09:40 ]
>>631
大丈夫、EDは治療できます。安心してください

633 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:22:11 ]
パズルとかよりエロデータ整理とか
ダウンロードの方が覚えると思うが。。。


634 名前:628 mailto:sage [2009/11/29(日) 21:36:03 ]
皆さん、ご返答ありがとうございました

635 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 15:26:13 ]
大量のエロデータとかダウンロードとかそんな興味ないわw



636 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 15:37:50 ]
実用的にはふくろうもいいけど、オートマトンや言語理論の勉強して
基礎を理解しておくと数学的に無理なことをやろうとしたりとか無駄に
悩まなくてよくなるのでお勧め。

637 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 16:21:11 ]
実装してみたけど、NFAからDFAへの変換で躓いた俺が通りますよ。

638 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 06:48:07 ]
「^\w+$」 から 「^_+$」 だけ除外して検索したいのですが、下のような記述でよいでしょうか?
自信がないのでお願いします。たぶん Perl です。

^\w*[a-zA-Z0-9]\w*$

639 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 08:20:42 ]
Perlだとしたら違うが、Perlじゃないとしても違う

640 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 09:19:26 ]
>>638
そもそも\wは[a-zA-Z0-9_]じゃないんだが

641 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 11:35:49 ]
>>638-639
○ 1行内に、1文字以上の、空白を含まない英数単語のみ ^[0-9A-Za-z_]+$ であればマッチする、
○ 但しアンダーラインのみ ^_+$ の連続は単語ではない。
正規表現はPerlの機能の一部として含まれる。すなわち、Perlには正規表現の機能が入っている。
正規表現で出来なくてもPerlなら出来る。

642 名前:デフォルトの名無しさん [2009/12/02(水) 12:35:03 ]
perlです。
$str="aa(bb)cc";
$ptn="aa(bb)cc";
のとき、
$str=~/$ptn/;
みたいな書き方でマッチさせたいんですが括弧が邪魔して無理でした。
$strと$ptnの内容は上記のままで、正規表現でマッチさせるにはどう書けば良いのでしょうか?

643 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 12:40:54 ]
>>642
そういうのはperlのスレで聞けよ。

$quoted_ptn = quotometa($ptn);
$str =~ /$quoted_ptn/

または

$str =~ /\Q$ptn\E/

644 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 12:42:56 ]
ごめんtypoしてるわ。

quotemetaが正解

645 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 12:51:49 ]
>>643
いけました。
どうもすいませんでした。
そして、ありがとうございました。




646 名前:427 [2009/12/03(木) 21:59:36 ]
前方一致(前方参照)について教えてください。

●正規表現の使用環境
秀丸7.11 HMJRE.DLL1.92

●検索か置換か?
検索

●説明
改行(空行)に挟まれたaだけを検索したい

●対象データ


a

a
a


●希望する結果


a ←これだけマッチしてほしい

a
a


647 名前:デフォルトの名無しさん [2009/12/03(木) 22:00:06 ]
以下を試しましたがダメでした。
(?<=\n\n)a(?=\n\n)
(?<=^$)a(?=\n\n)

バラして試したところ、どうも後方一致で改行は認識してくれるみたいですが、前方一致では改行はダメのようです。
(?<=\n\n)a ←ダメ
(?<=\n)a ←ダメ
a(?=\n\n) ←OK

そこで知りたいのは、
前方一致で改行を使えないのは仕様でそうなっているからでしょうか?そうした記載を見つけることが出来ませんでした。
また改行(空行)に挟まれた文字を検索する方法がありましたらぜひお教えください。

648 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:22:43 ]
>>647
前方一致って look-behind のこと指して言ってんの?
それはともかく、秀丸は改行絡みの扱いが弱いから制限事項でない?



649 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:33:51 ]
>>646
マッチして欲しいaが空行に挟まれてないじゃん

650 名前:デフォルトの名無しさん [2009/12/03(木) 23:42:48 ]
秀丸v8β28なら (?#fulllinematch)\n(a)\n\n(?\1) でできるみたい

前方一致は秀丸で使われている独自用語。一般用語では648のとおり。




651 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 23:50:50 ]
"(a b)(c d e)"
こういう文字列を
(a b)と(c d e)に分割する事って出来ませんか? 出来ればrubyでお願いします

652 名前:650 [2009/12/03(木) 23:52:40 ]
おっと間違えた。
(?#fulllinematch)\n\n(a)\n\n(?\1) だ

653 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 00:46:20 ]
r = /(\(+)
([^\(]+)
(\)+)
/x

"(a b)(c d e)" .scan(r).map do |m|
puts m.to_s
end


654 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 00:51:04 ]
ありがとうございます
追加で悪いんですが・・・
"(a b)(c (d e))" もし、こういうネスト構文になった場合
正規表現での分割は無理でしょうか?
(a b)
(c (d e))

655 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 02:39:38 ]
>>654
全ての場合に対応するのは無理



656 名前:646 [2009/12/04(金) 07:03:25 ]
>>650
ありがとうございました。
なんか最新βからfulllinematchなるものが使えるようになったみたいですね。
実にタイムリーでした。
おまけに (?<=\n\n)a を実行すると「前方一致では改行文字は使えません」なメッセージも表示するようになっていました。
で、「前方一致」って秀丸独自だったんですね。以後注意します。


657 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:12:15 ]
>>653
を少し改良してみて
p "(a b)(c d e)test".scan(/(\([^\(]*\))/)
こうなったんですが
何故^\(を[]で囲わなきゃいけないんでしょうか?

↓のようにかいても意味は同じだと思うんですが動かないんです。かき方が違うんでしょうか?
p "(a b)(c d e)test".scan(/(\(^\(*\))/)
p "(a b)(c d e)test".scan(/(\(.*\))/)

658 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:24:08 ]
正規表現では、[]で囲まれると、他の部分と意味が変わって、
たとえば [^\(] の場合、( 以外の任意の一文字、という意味になる。

659 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:34:02 ]
>>658
^この否定は[]の中でしか使えないんですかね
(a b)と(c d e)に分割するには/(\([^\(]*\))/これが最小コードとなるんでしょうか?

あと>>653さんのかいた//x のxの意味もよくわからず消してしまったんですが、xをつけると何が変わるんでしょう?

660 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:00:25 ]
>>658
[]の中の(はエスケープいらんだろう。

>>659
オマエはマニュアル読むって頭を持ってないのか?


661 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:20:50 ]
>>660
だって、早く簡単にわかるならそのほうがいいじゃないですか。


662 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:11:59 ]
うわぁぁぁ

663 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:52:52 ]
>>660
//xについての記述はぐぐりにくいので見つけられなかったです

664 名前:デフォルトの名無しさん mailto:>>661 [2009/12/05(土) 00:03:30 ]


       | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
       |                    |
       |                    |
       /    ̄ ̄ ̄ ̄      /
       /  ぶち殺すぞ     /
     /              /
     /              /
    /   ____     /
   /             /
 /             /


665 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:05:30 ]
確かに調べるのめんどくさいんですが、
2chはいつから喰わず嫌いをはじめたのか、質問したい

次の方どうぞ



666 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 11:36:21 ]
釣りはいいから。獣の数字げっと

667 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 12:02:56 ]
鬼車でひいひいいわせてやるよ

668 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 15:49:19 ]
諸君、進んでおるかね?

669 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 18:46:12 ]
●正規表現の使用環境
otbedit(www.hi-ho.ne.jp/a_ogawa/otbedit/index.htm)というエディタです。
(emEditorでは行をまたいだ置換がうまくいかずotbeditに変えました。使えればソフトにはこだわりません)
Perl互換の拡張正規表現が使えるとのことですが、詳しい説明が書いておらずわかりませんでした。

●検索か置換か?
置換

●説明
特定の文字列の間にある空でない文字列の最後に任意の文字列を加えること
(例では@Bと@Aの間にある空でない文字列の最後にaを付け加えたい。できればそれから@Aと@Bは除外したい)
【@B(.|[\r\n])*?@A】で全体から特定の範囲を指定した後で
【[^\n]+$】→【$&a】の置換の繰り返しで可能ではありましたが、数が多いのでできれば一括で置換したいです。

●対象データ

@A
あいうえお
@B
かき

っくけこ
さしす
@A
せそたち
つてと
@B
なにぬね
のは
@A
ひふへほ

670 名前:デフォルトの名無しさん [2009/12/15(火) 18:49:00 ]
●希望する結果

@A
あいうえお
@Ba
かきa

っくけこa
さしすa
@Aa
せそたち
つてと
@Ba
なにぬねa
のはa
@Aa
ひふへほ




↑できれば@Aや@Bにaをつけたくはありません

671 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 04:39:29 ]
ゼロ幅アサーション

672 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:54:38 ]
誰かCで正規表現できるクラス作れよ
BOOST使いづらすぎる

673 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 02:34:55 ]
CじゃなくてC++です

674 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 04:07:23 ]
Boost Regex++じゃ駄目なのか

675 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 14:59:11 ]
Boost使いづらいです・・・



676 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:27:52 ]
xpressiveもだめ?

677 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 17:04:49 ]
今出先なので、帰ったら見てみます

678 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 18:28:13 ]
鬼車ってどうなんでしょうか?

679 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 19:27:41 ]
どうって?

680 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 22:41:42 ]
性能?

681 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:06:52 ]
鬼車って確か検索機能しかないよね(置換機能が無い)
置換を自力で実装するの面倒なんで代わりにbregonig.dllとか使うんだけど
文字コードsjisしか使えなくて勿体無いあああってなる

682 名前:デフォルトの名無しさん [2009/12/25(金) 19:56:08 ]
●正規表現の使用環境
perl5.8.7 CentOS 5.3
文字コードはEUCです。

●検索か置換か?
置換

●説明
全銀テレ為替文字対応のため、数字、大文字英字、半角カナ・濁点、一部半角記号記号のみの文字列に
変換したいのです。
可能文字はこちら
ttp://www.kyodocms.jp/qanda/qa18.htm

これら以外の文字を半角スペースに置き換えたいのです。

●対象データ

任意の文字列です。

1.ひらがな→カタカナ変換
2.全角→半角変換
3.英小文字→英大文字変換
4.ァィゥェォッャュョをアイウエオツヤユヨに変換

ここまで出来てて、入力可能文字以外をスペースに置き換えたいんですが、上手くいきません。
どうすればいいでしょうか?


683 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:29:25 ]
[^0-9A-Zアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン゛°\\,\.「」\(\)\-\/]


に置換
あってるかどうかは試してないけどこういうこと?

684 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 22:49:43 ]
>>683
レスどうもです。そのとおりです。
>>682の条件を変数$regExpに代入し、

$result = 'パ-カ-ヲ買ツタ01234567';
$result =~ s/$regExp/ /g;

とすると、漢字だった部分が文字化けし、「パ-カ-ヲ ・糟・1234567」となってしまいます。
結果は「パ-カ-ヲ ツタ1234567」にしたいのです。


685 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:05:51 ]
未定義領域含んでるんじゃね?
文字の正規表現
www.din.or.jp/~ohzaki/perl.htm#Character



686 名前:デフォルトの名無しさん [2009/12/26(土) 00:26:46 ]
質問があります。
<div id=・・・>←1
   <div id=・・・>
   </div>←2
   <div id=・・・>
   </div>←3
</div>←4
抜き出したいのは1から4全体なんですけど
"<div id=・・・(.+?)</div>
で非欲張り系で抜き出すと1から2までヒットします。
1から4全体を抜き出す方法ていうのはないのでしょうか?
XML形式ならいけるぽいのですが・・・
無理なのでしょうか?



687 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 01:52:00 ]
対応するタグという意味なら田中スペシャルが使えればできる。

688 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 08:16:39 ]
ていうか素直にXMLパーサ使え

689 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:19:49 ]
HTMLの処理には正規表現ではなくHTMLパーザを、XMLの処理にはXMLパーザを。

テンプレに入れてもいいレベルのFAQ。


690 名前:デフォルトの名無しさん [2009/12/27(日) 02:55:21 ]
わかりました。パーサを調べてみます

691 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:29:47 ]
文字列を分割するとき、特定の文字で囲われているものは除外するっていう方法ありますか?
phpなんですけど
preg_splitで例えば
A,B,C,'D,E',F

[0]=A
[1]=B
[2]=C
[3]=D,E
[4]=F

上記のように分割できますか?

692 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:34:35 ]
普通にCSVのモジュール使えばいいのでは

693 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 19:36:26 ]
>>691
詳説 正規表現 にCSV処理のサンプルあるよ。オヌヌメ

694 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 15:29:52 ]
●正規表現の使用環境
Java1.5(Firefox 3.0.16)

●検索か置換か?
検索

●説明
\.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jpという文字列を検索したいです。
※検索対象の文字列自体が正規表現のようになっています。

●対象データ
\.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp

●希望する結果
\.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
※完全一致


自分なりに\を付けたりして試してみたのですが出来ませんでした。
以上、どうかよろしくお願いします。

695 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:02:17 ]
文字列定数内の \ 自体を \\ とするエスケープまで含めて
"\\\\\\.nas\\(3\\|5\\)\\\\d\\+\\\\\\.\\[a\\-z\\\\\\-\\]\\+\\\\\\.nttpc\\.ne\\.jp"
となる



696 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 10:01:19 ]
>>695
694です。
どうもありがとうございました。
すごく長い表現になっちゃうんですね。(汗


697 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 15:49:42 ]
こんにちは。
度々すみませんが、よろしくお願いします。

●正規表現の使用環境
Java1.5(Firefox 3.0.16)
●検索か置換か?
検索
●説明
#ipbf\d+souka.saitama.ocn.ne.jp という文字列を検索したいです。
//マッチする
var body = document.body.innerHTML;
var temp1;
temp1 = new RegExp(/#ipbf\\d\+souka.saitama.ocn.ne.jp/);
alert(temp1.test(body));
//マッチしない
var body = document.body.innerHTML;
var word = new Array();
var temp2;
word.push('#ipbf\\d\+souka.saitama.ocn.ne.jp');
for (var i = 0; i < (word.length); i++)
{
 temp2 = new RegExp(word[i]);
 alert(temp2.test(body));
}
●対象データ
#ipbf\d+souka.saitama.ocn.ne.jp
●希望する結果(※完全一致)
#ipbf\d+souka.saitama.ocn.ne.jp
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
「//マッチしない」方の配列内容を変えずに(\を追加せずに)一致させたいです。

以上どうか、よろしくお願いします。

698 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 16:25:29 ]
Pattern.quote 使えばできるんでない?

699 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 22:01:43 ]
>>697
word.push(/#ipbf\\d\+souka.saitama.ocn.ne.jp/);

700 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 22:38:39 ]
>Java1.5(Firefox 3.0.16)
JavaじゃなくてJavaScriptでしょ?それなら>>695は正規表現リテラルでこう書ける
/\\\.nas\(3\|5\)\\d\+\\\.\[a\-z\\\-\]\+\\\.nttpc\.ne\.jp/

701 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 16:48:00 ]
>>698
>>699
>>700
返事が遅くなりすみません。
レスありがとうございます。
体調が悪くまだよく試していないのですが、まずはお礼だけで失礼します。

702 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 22:07:34 ]
JavaとJavaScriptが区別できない人っていまだにいるのか…

703 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:16:48 ]
VBとVBAの違いもな。
説明するの大変なんだよな・・・。

704 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:32:15 ]
VBとVBAの違いなんて知らない奴たくさんいるだろ
VB触ってるのは底辺だけなんだから

705 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:55:38 ]
ゲーム機は全て「ファミコン」だ。



706 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 01:36:20 ]
ファミコンって何だ?
ピコピコのことか?

707 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 13:05:34 ]
ピコピコはゲームウォッチ系じゃねーの?

知人が20万円ほど出してPC-98を買ったら
姉に「たっかいファミコンやなぁ」と言われたらしい。


708 名前:デフォルトの名無しさん [2010/01/05(火) 12:45:41 ]
●正規表現の使用環境
Java1.5
●検索か置換か?
検索
●説明
123456700 とか12345678-00など
7桁から10桁の数字にあと2桁の数字がハイフンもしくは連続して付属する数列の検索。
数列の直前にCodeまたはInvoiceがついてたら除外する。
Invoice 12345678-00 はマッチしないけどaccess# 12345678-00 はマッチする。
"On Invoice 123446789, your order was placed. However, please be sure to note that your account number 789456123 is suspended until further notice."
最初の番号Invoice 123446789は無視するけどaccount number 789456123はマッチするようにしたい。

●対象データ
Invoice 123446789
word 454545454
454545454545
Code: 4085432259
passcode 6789012 06
number 8901234 08
word 454545454 word

●希望する結果
マッチしない
Invoice 123446789
Code: 4085432259
passcode 6789012 06
Code 7890123-07

^(?!(Code|Invoice).)([^=\/%(.]\b\d{7,10}((\d?\d?)|(-\d\d))?\b)
自分でここまでやったけどうまく動かないです。
よろしくお願いいたします。

709 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 13:09:16 ]
javaならプログラム書けるんだからInvoice,Codeのことはとりあえず
忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode,
Invoiceがないことを確認する方がたぶん楽だと思うよ。

710 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 13:09:29 ]
javaならプログラム書けるんだからInvoice,Codeのことはとりあえず
忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode,
Invoiceがないことを確認する方がたぶん楽だと思うよ。

711 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 13:10:13 ]
すまん2つ出た

712 名前:デフォルトの名無しさん [2010/01/05(火) 14:16:10 ]
ありがとうございます。実際にはJAVAで作成しているわけではなく、アプリケーションがJAVAとおなじ正規表現を使用している環境なので、プログラムを書くことはできないんです。それでここでアドバイスがいただければと思いまして、

713 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 14:30:07 ]
look-ahead(?!...)じゃなくてlook-behind(?<!...)を使うとこだね。

そしてlook-behindはたいていある決まった長さのの文字列に
マッチするパターンがしか使えないので、

(?<!Invoice: )(?<!Invoice )(?<!Code: )(?<!Code )

のように並べて使うことになるだろう。

必要な仕様がきちんと書かれてないのでこれだというのは
示せないけどがんばれ。

714 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 14:51:49 ]
●正規表現の使用環境
VB.NET

●検索か置換か?
検索

●説明
タブを含む何かの文字列の複数行を表す方法を教えて

●対象データ
AAAA
TAB TAB hogehoge改行
あああああ
TABT ABT AB hogehoge改行
TAB TAB hogehoge改行
ZZZZ

●希望する結果
あああああ

Regex("AAAA\n([\t.]+?\n)+(?<1>.+?\n)([\t.]+?\n)+ZZZZ",MultiLine)

上のように書いてみましたがだめでした。
AAAA改行とZZZZの間の文字列をターゲットにしつつ
その中にタブか何かの文字の組み合わせの文字列が1つ以上あって、行末に改行がある
という行がいくつかある。
ということを書いたつもりなのですが間違っているところを教えて頂きたいです。


715 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:06:04 ]
[\t.]だとタブまたは任意の文字なので結局[\t.]+?は.+?と書いたのと同じ。
また、〜+?とは普通書かないね。〜*と同じなので。

\tが少なくとも一つ含まれた行にマッチさせたいなら、

.*\t.*\n



716 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:09:31 ]
いや+?は最短マッチだろ。

717 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:12:27 ]
Multilineなら\nは.に含まれないので、.+?\nと書いても結局.*\nと
同じになるっていいたいんじゃねーの?

718 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:48:20 ]
それをいうなら.+じゃないか

719 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 16:31:59 ]
前にも .+? と .* が等価だと思ってる人がいたような。
\d? とかの ? と同じものに見えてるのかな。

720 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 22:00:58 ]
>>715
[\t.] ってブラケットの中にはいってんのなら'.'は単なるピリオドでしょ。


721 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 22:09:28 ]
Javascriptを勉強中です。といっても、ブックマークレット程度しかやってませんが。
正規表現を練っていたときに、もうかなり以前のブラウザから最短一致(ものぐさ/non-greedy/非貪欲)が
使えるようになっていたことを知り、いま必要というわけではないのですが、詳しく調べてました。

{n,m}? {n,}? *? +? ?? ←これらについては自習して使い方を理解したのですが、{n}? が解りません。
どう考えても {n} と {n}? は同じ結果になるように思えるのです。
正規表現のリファレンスや正規表現を解説しているサイトは数多く見ましたが、量指定子の直後に?を付けた
{n}? を紹介はしていても、その使い方を例示したものを見つけることが出来ませんでした。
どなたか解説していただければ幸いです。よろしくお願いします。

  記号関係はGoogleでも検索しづらいので、なかなか見つかりません。Googleの弱点ですね。

722 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 22:36:48 ]
googleに頼り切ってるヤツの弱点に見えるけどなぁ

ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html
>a{n}? = ちょうどn回の繰り返しにマッチします。ちょうどn回なので、a{n}と等価であり、一貫性のためだけに存在します。

要するに/x{1}/の意味を問うているようなもん

723 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 12:53:43 ]
>>722
的確な回答ありがとうございます。

>googleに頼り切ってるヤツの弱点に見えるけどなぁ
検索ばかりしてるんじゃなく良書を得てそれで勉強せよ、またはGoogleに頼り切ってると
目が節穴になるぞ、というお叱りと理解いたしました。

☆perlretut - Perl の正規表現のチュートリアル
ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html
これは>>2の一番最初、「正規表現メモ」のページにある一番最初のリンクですね。
答えへの近道はGoogleでなく、このスレにあったようで…目が節穴でした。
このチュートリアルはとても解説が丁寧で、まさしく良書だと思います。これで勉強します。

結論としては /x{n}/ と /x{n}?/ は同じ結果なので、通常 {n}? は使用されない、ですね。

やはりPerlだと細かい情報もしっかりあってスゴイです。
これからは正規表現で悩んだらこのスレとPerlの周辺を当たってみようと思います。

724 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 15:57:50 ]
>>723
それ、Perlのマニュアルなんだよ。UNIX系のシステムだったら
man perlretut を実行すると表示されるよ。

ウェブを見るより先にマニュアルを読めってことで。



725 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 16:31:29 ]
.NET のマニュアルにも {n}? は {n} と等価って書いてあるな。
なんか訳が微妙におかしいけど。

msdn.microsoft.com/ja-jp/library/3206d374(VS.80).aspx



726 名前:723 mailto:sage [2010/01/12(火) 22:05:22 ]
>>724
UNIX系とは縁がありませんが、perlre/perlretutはWeb上にあるので、それをmanの代わりにします。
Javascriptで使える表現かどうかは、以下を見てチェック。
☆RegExp - Core JavaScript 1.5 Reference - Mozilla Developer Center
ttps://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/RegExp
出来るだけ大本の公式情報を参照すべし、ですね。

>>725
情報ありがとうございます。間違ってはいませんが、確かに変ですねぇ。

perlretut、面白いですね−。塩基配列のストップコドンのとことか。
自習してみて、チュートリアルと同じ結果になるのを確認したのはいいのですが…
Javascript:var R=/(\w\w\w)*?TGA/g, S='ATCGTTGAATGCAAATGACATGAC', A = [], I = 0; while(R.test(S)) {A[I] = RegExp.lastMatch + ' (' + RegExp.lastParen + ') Pos=' + R.lastIndex; ++I;} alert(A.join('\n\n'));
なぜずれるのか、理解できず…。その後バックトラックの動作を知り、単に「必ず3文字ずつ進む」と
思い込んでただけだと気付きました。。。マッチにトライして失敗したらそこで終わりではなく、
開始位置を1文字進めるんですね。筆者が仕掛けた罠に見事にハマりました。。。
というか、こういう処理は素直に3文字ずつ取り出して判定すべきですよね。
なお、Javascriptには\Gなんてありませんでした。残念!

727 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 21:03:05 ]
>726
man じゃなくても perldoc perlretut でいけるよ。

728 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 16:56:04 ]
>>725
MSDNライブラリは機械翻訳だからしかたないべ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<175KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef