正規表現 part 3
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2006/08/24(木) 19:04:59◆関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/
正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/
詳説 正規表現
http://www.oreilly.co.jp/books/4873111307/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
JScript 正規表現の概説
http://msdn.microsoft.com/library/ja/script56/html/js56reconIntroductionToRegularExpressions.asp
.NET Framework 正規表現言語要素
http://msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp
◆関連スレ
[UNIX板] 正規表現
http://pc8.2ch.net/test/read.cgi/unix/1039165754/
◆前スレ
[1] http://pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] http://pc8.2ch.net/test/read.cgi/tech/1131028296/
0002デフォルトの名無しさん
2006/08/24(木) 19:06:290003デフォルトの名無しさん
2006/08/24(木) 22:10:05"[A-Za-z0-9]*"でサクッと半角英数字チェックするだけなのに
'a' <= c && c <= 'z'とかで判定する方が10倍速かった。
うーん、スクリプトだから許容できるのが正規表現だとでもいうのか。
0004デフォルトの名無しさん
2006/08/24(木) 22:24:370005デフォルトの名無しさん
2006/08/29(火) 11:35:250006デフォルトの名無しさん
2006/09/09(土) 17:31:20まあそんなもんだわさ
0007デフォルトの名無しさん
2006/09/12(火) 00:58:150008デフォルトの名無しさん
2006/09/13(水) 00:09:49インフォ正規
インフォ精液
0009デフォルトの名無しさん
2006/09/13(水) 13:51:04という文字列から
変数aに111を、変数bに222を
格納するようにするにはどうしたらいいですか
0010デフォルトの名無しさん
2006/09/13(水) 13:55:11a = $&
でaに111は格納できたんですが
222も見るにはどうしたらいいですか
0011デフォルトの名無しさん
2006/09/13(水) 14:02:05Ruby なら scan を使うと文字列を逐次正規表現マッチできて便利だよ。
"aaa111bbb222".scan(/([a-z]+)(\d+)/).each { |key, val|
p [key, val]
}
ブロックの中は適当に料理してちょ。
0012デフォルトの名無しさん
2006/09/13(水) 14:15:26a = Array.new
"aaa111bbb333".scan(/\d+/).each{|tmp|
a << tmp
}
てな感じで解決しました。ありがとうございました。
0013デフォルトの名無しさん
2006/09/13(水) 14:23:210014デフォルトの名無しさん
2006/09/14(木) 05:46:090015デフォルトの名無しさん
2006/09/14(木) 10:14:560016デフォルトの名無しさん
2006/09/14(木) 12:07:26って言われたらどっちを選びますか?
0017デフォルトの名無しさん
2006/09/14(木) 12:11:110018デフォルトの名無しさん
2006/09/14(木) 13:06:04jul08,jun01のように前に0を入れたいのですが
これを正規表現で実現しようとすると
数字と文字を別々にマッチさせて
$10$2のように書くと、$10と解釈されてしまいます
エスケープは置換文字列では使えないようなんですが
何か良い方法はあるでしょうか?
0019デフォルトの名無しさん
2006/09/14(木) 13:08:080020デフォルトの名無しさん
2006/09/14(木) 13:18:27勘で "${1}0${2}" とか。
0021デフォルトの名無しさん
2006/09/14(木) 16:31:08ttp://ukiya.sakura.ne.jp/
0022デフォルトの名無しさん
2006/09/14(木) 17:49:04正規表現テスターをとりあえずダウンロードした。
0023デフォルトの名無しさん
2006/09/14(木) 19:19:360024デフォルトの名無しさん
2006/09/14(木) 19:21:580025デフォルトの名無しさん
2006/09/14(木) 20:22:33jul08,jun01
がまざってたら
jul008,jun001
ができる
0026デフォルトの名無しさん
2006/09/14(木) 20:33:36んなこたあない。
s/([a-z]+)(\d)\b/${1}0$2/g;
0027デフォルトの名無しさん
2006/09/15(金) 00:41:30>>25
>>26
なるほど、自分の勉強不足でした。
{
0028デフォルトの名無しさん
2006/09/15(金) 01:13:44TextMateというエディタから用いて変換していました。
日本語マニュアルがないため、置換文字列でどんな構文
があるかきちんと調べた事がなかったですが、今回気になって
調べてみると(?1:$1)0$2という置換文字列でうまくいきました。
Perlのやり方も凄く勉強になりました。
お騒がせしてすいません。
0029デフォルトの名無しさん
2006/09/15(金) 06:52:330030デフォルトの名無しさん
2006/09/18(月) 00:12:48《.*》
だと
朝の|挨《あい》|拶《さつ》を
が
朝の|挨が
になっちゃうわけです。同一行に《が二つ以上現れなきゃいいんだけれども
実際現れるから困る。知恵を貸して欲しい
0031デフォルトの名無しさん
2006/09/18(月) 00:15:28s/《.*?》//g;
「perl 最短一致」でググれ。
0032デフォルトの名無しさん
2006/09/18(月) 00:25:230033デフォルトの名無しさん
2006/09/18(月) 18:29:26マッチささたいのですがどうしたらいいですか?
0034デフォルトの名無しさん
2006/09/18(月) 20:01:130035デフォルトの名無しさん
2006/09/18(月) 20:27:32勿論 !/^ / とはマッチするものが違う
0036デフォルトの名無しさん
2006/09/18(月) 20:29:29Perlなら、
$str !~ /^ /
じゃダメなの?
0037デフォルトの名無しさん
2006/09/18(月) 21:12:42それだと空行や1個や2個しか文字が無い行もマッチするけどね。
0038デフォルトの名無しさん
2006/09/21(木) 00:03:58この正規表現は、二つ以上の連続した改行文字(\n)にマッチしますが
\n と \nの間にいくつかの空白文字(半角スペース, タブ)がある場合にマッチする表現がわかりません。
一応「 [\n](|[\s]*)[\n] 」と書いてみたものの、思うようにマッチしません。
どう表現すればよいのでしょうか? よろしくおねがいします。
0039デフォルトの名無しさん
2006/09/21(木) 02:26:10で、何を使ってでそれをやろうとしているの?
\s とかあるからPerlかな?
マッチングに使っている部分全部さらしてみ。
0040デフォルトの名無しさん
2006/09/21(木) 02:38:33正規表現勉強しなおせ
/\n\s+?\n/
0041デフォルトの名無しさん
2006/09/21(木) 03:41:31004338
2006/09/21(木) 20:50:34PHPのpreg()系です。
HTMLの<textarea>から</textare>に入力された文字から、連続した改行(=空行=)を取り除こうと思ったのです。
ただ、空行ではないけれど、改行と改行の間にスペース(タブも含む)がある行も取り除きたいのです。
これはどう表現すればよいのでしょうか?
当然ですがtextarea要素の内容は、全体を一つの文字列として扱うので「 ^$ 」という表現はダメでした。
0044デフォルトの名無しさん
2006/09/21(木) 21:47:37Rubyならhtmlパーサがあるから簡単に処理できるのだがな。
0045デフォルトの名無しさん
2006/09/21(木) 23:00:15> PHPのpreg()系です。
先に言えよ、ヴォケ!
$html = preg_replace_callback('{(?<=<textarea>)(.+?)(?=</textarea>)}si',
create_function('$matches',
'return preg_replace("/(?<=\\n)\\s*\\n/", "", $matches[0]);'), $html);
0046デフォルトの名無しさん
2006/09/21(木) 23:11:480048デフォルトの名無しさん
2006/09/22(金) 00:07:15そんなときは、一度でやろうとせずに
まず
「空白のみを含む行を削除」してから
「連続する改行を1改行に置換」するといいかもね。
0049デフォルトの名無しさん
2006/09/22(金) 00:23:27正規表現勉強しなおせw
0050デフォルトの名無しさん
2006/09/22(金) 00:24:19@abc.gr.jp と @wxy-z.co.jp
以外のアドレスを拒否する場合
どうしたらいいでしょうか。
0052デフォルトの名無しさん
2006/09/22(金) 01:59:16ただのpreg_replaceでこんな感じでいけるだろ
/(^|\n)\s*(?:\n)/
あっちのスレで話題になってた各ブラウザの挙動がどうのは知らん
0053デフォルトの名無しさん
2006/09/23(土) 08:29:03&gt; から &lt; に含まれる <br> のみ全て削除するにはどうすればいいでしょう?
$str =~ s/&lt;(.*?)<br>(.*?)&gt;/&lt;$1$2&gt;/g;
でやってみたのですが、<br>が複数ある場合ひとつしか削除できません。
いろいろ調べたんですが行き詰りました。
低レベルな質問かもしれませんがお願いします。
(文中の&は全角ですが実際は半角でやってます。)
0054デフォルトの名無しさん
2006/09/23(土) 09:05:05my ($tmp) = @_;
$tmp =~ s/<br>//g;
return $tmp;
}
を用意した上で
s/&gt;(.*?)&lt;/delbr($&)/ge;
0055デフォルトの名無しさん
2006/09/23(土) 17:59:43正規表現だけで、Not条件を加えるのは無理なんでしょうか?
http://www.kt.rim.or.jp/~kbk/regex/regex.html#CCLASS
にあるような、よくある勘違いの例と同じなのですが、
ここで言うと[^foo]が"foo"以外では無く、fとo以外の一文字をあらわすのはわかります。
でも、それではその"foo"を全体を含まない文字列というのを
表現(追加)したい場合はどうすればいいんでしょうか?
"|"でorが出来るみたいにnotできたら簡単確実なのに、うまく除外するのに毎回頭を絞ってます。
検索等フロントエンドの実装で、否定条件指定のフィルタリングがある場合ならいいんですが…
例えば[^(giko|mike)]nekoみたいな感じで、簡単に文字列や正規表現全体を
否定(〜以外)できたらなにかと便利だと思うのですが、
それは正規表現の範疇外なのでしょうか?
うまくやる方法はありますか?
0056デフォルトの名無しさん
2006/09/23(土) 18:26:40こうですか!? わかりません!
…原理はわからないが環境によっては動くな。おいおい勉強しまつorz
0057デフォルトの名無しさん
2006/09/23(土) 18:39:05すごい便利。
Rex V: an AJAX Regular EXpression eValuator
http://www.rexv.org/
0058デフォルトの名無しさん
2006/09/23(土) 18:46:54何を何でやりたいのかはっきり書かないからレスがない。
0059デフォルトの名無しさん
2006/09/24(日) 00:18:490060デフォルトの名無しさん
2006/09/24(日) 10:55:50\b(?:(?!giko|mike)\w)+neko
とか、どうですか。
0061デフォルトの名無しさん
2006/09/24(日) 11:06:490062デフォルトの名無しさん
2006/09/24(日) 11:36:40おまえのアヌスになど興味はない
0063デフォルトの名無しさん
2006/09/24(日) 20:50:080064デフォルトの名無しさん
2006/09/24(日) 22:59:480065デフォルトの名無しさん
2006/09/24(日) 23:18:17ξ←ソフトクリーム
MS Pゴシックで見てね1
0066デフォルトの名無しさん
2006/09/25(月) 00:05:06(´∀` )
(⊃⌒*⌒⊂)
/__ノ''''ヽ__)
0067デフォルトの名無しさん
2006/09/25(月) 20:11:30のようなリンクを
<a href='http://hoge/page'>javascript:window.open</a><br>
にするには
Obj.href.replace(/JavaScript:window.open\((\"?|\'?)(.*?)(\"?|\'?),?.*\);?(.*);?/ig,'$2')
ではうまくいきません。
よろしくお願いします。
0068デフォルトの名無しさん
2006/09/25(月) 20:24:200069デフォルトの名無しさん
2006/09/26(火) 18:09:05置き換えるのは空白一文字ではなく、コメントになっている文字分空白にしたいです
0070デフォルトの名無しさん
2006/09/26(火) 23:01:46$pat='>(.*?)</c>';
if($text=~/$pat/) {
print $1."\n";
}
else {
print "ng\n";
}
AIUEOのみ抽出したいのですが、</b>AIUEOが返ってきます。
.*?は最短マッチのはずですが、なぜでしょうか?
0071デフォルトの名無しさん
2006/09/26(火) 23:29:57こういう例を考えると正規表現よりCでコード書いた方が早いと思うよ
printf("string//string"); // print
>>70
Perlでは一度成功したらそれでマッチが完了する
最短なのは .* に関してのみ
>([^<>]*)</c>
で望みのマッチをする
0072デフォルトの名無しさん
2006/09/26(火) 23:39:31007370
2006/09/27(水) 00:12:15>Perlでは一度成功したらそれでマッチが完了する
これは前方から順に一致検索をしているとから、ということですか?
たとえば、
$text='</b></b>AIUEO</c></c>';
$pat='</b>(.*?)</c>';
の場合、$textの先頭側にある</b>と</c>に挟まれた文字列が抽出されてくるから、</b>AIUEOがマッチ。
もし後方から一致検索されていれば、AIUEO</c>がマッチするはずですもんね。
スマートな方法がなさそうなので([^<>]*)にしときます。
ありがとうございました。
>>72no
0074デフォルトの名無しさん
2006/09/27(水) 12:03:56BEGIN {
$COMMENT = qr{/\*.*?\*/};
$COMMENT2 = qr{//[^\n]*};
$DOUBLE = qr{\".*?[^\\]\"};
$SINGLE = qr{\'.*?[^\\]\'};
$OTHER = qr{[^"'/]};
}
s/($DOUBLE|$SINGLE|$OTHER+)|$COMMENT|$COMMENT2/$1/g;
詳説 正規表現がどっかにいってしまった
添削希望
0075デフォルトの名無しさん
2006/09/27(水) 12:10:090076デフォルトの名無しさん
2006/09/27(水) 20:30:05速度はともかく開発効率がいいから、
決められたライブラリしか使えないときに便利なんだよね
0077デフォルトの名無しさん
2006/09/27(水) 23:51:17意外とシンプルにまとまるんだね
リテラルで"string\\"のパターンが来ると内外逆転するかな
やり方はいろいろあるけど qr{"(\\.|[^"])*"} とか
0078デフォルトの名無しさん
2006/09/28(木) 00:21:03GUIコンポーネントの入力チェックに使ったことはあるな
ああいうのは手でコーディングするのは苦痛なだけだから。
あと、入力チェックが必要になるようなGUIコンポーネントの場合、
入力は一般的に短いので、速度は問題にならないし
0079デフォルトの名無しさん
2006/09/28(木) 07:56:20<aaa>
<aaa>
<aaa>
<aaa>
<data1>xxxx</data1>
<data2>yyyy</data2>
</aaa>
</aaa>
</aaa>
</aaa>
こんな文字列があったとして
正規表現つかって一発で一番内側にある<aaa>
の内側の文字を取ってくることってできるんだろうか・・・・
可能か不可能かどうかも想像がつかない・・・orz
0080デフォルトの名無しさん
2006/09/28(木) 09:04:06できる。
0081デフォルトの名無しさん
2006/09/28(木) 09:23:50横からスマソ
へぇ〜
出来るんだ
これは俺もちょっと興味深い
0082デフォルトの名無しさん
2006/09/28(木) 12:00:380083デフォルトの名無しさん
2006/09/28(木) 15:40:04最初からXMLとして扱ったほうが楽なんじゃないの?
0084デフォルトの名無しさん
2006/09/28(木) 18:50:490085デフォルトの名無しさん
2006/09/28(木) 19:22:59入れ子処理だよね。正規表現第二版だと…
( )の入れ子の場合こうなっているから、
$LevelN = qr/ (?> [^()]+ | \( ??{ $LevelN }) \) )*/x;
えーと………
$LevelN = qr/ (?> [^(<aaa>|<\/aaa>)]+ | <aaa> (??{ $LevelN }) <\/aaa> )*/x;
……(<aaa>|<\/aaa>)の否定ってどうやるんだ?
後は任せた orz
0086デフォルトの名無しさん
2006/09/28(木) 20:12:05いや、今の「正規表現」が厳密には正規表現じゃないのは知ってるけど、やっぱり
無理やり拡張したため、無理が出てると思うんだ
0087デフォルトの名無しさん
2006/09/29(金) 00:07:24/(<aaa>)*(.*?)<\/aaa>/
0088デフォルトの名無しさん
2006/09/29(金) 01:50:24(<aaa>.*)*<aaa>(.*?)<\/aaa>
Perlなら、(<aaa>.*?)*<aaa>(.*?)<\/aaa>
でもイケた。
0089デフォルトの名無しさん
2006/09/29(金) 04:41:56Perlなら、{(?:<aaa>.*?)*<aaa>(.*?)</aaa>}m
0090デフォルトの名無しさん
2006/09/29(金) 10:15:222. End Function
3. Exit Function
上記で1だけを検索したい場合どうすればいいでしょうか?
↓ではだめでした
(?<!(Exit|End))\s*Function
0091デフォルトの名無しさん
2006/09/29(金) 10:20:41^Function$
でいいんじゃね?
0092デフォルトの名無しさん
2006/09/29(金) 10:39:03トンクス!
もらった情報でなんとかなったさ〜!
ソフトでガリガリ解析するのがたまらなかったんで・・・
ちなみにXML解析じゃぁないんだけどね(^^;
俺ももっと勉強しなきゃ・・・だなぁ(;´Д`)
もっと頭やわらかくする必要がありそうだorz
0093デフォルトの名無しさん
2006/09/29(金) 10:43:36(?:^|[^dt\s]|(?:^|[^n]|(?:^|[^E])n)d|(?:^|[^i]|(?:^|[^x]|(?:^|[^E])x)i)t)\s*Function
オレならFunctionでマッチさせてマッチ位置もらってからEndかExitが前に
ないことを別途調べるな。否定と正規表現は相性悪い。
0094デフォルトの名無しさん
2006/09/29(金) 10:45:470095デフォルトの名無しさん
2006/09/29(金) 11:06:530096デフォルトの名無しさん
2006/09/30(土) 02:44:00俺も同じこと思った。あと、XMLだとそもそも既存のパーサがあるのに
何故それを使わないで正規表現で済まそうとするのかと。あと、ある要素
取り出すだけなら、>>95の書いているようにXPath使う手もあるな
0097デフォルトの名無しさん
2006/09/30(土) 06:37:14色んな検索エンジンや仕様があって把握しきれません
まとめたサイトみたいなものはありませんか
0098デフォルトの名無しさん
2006/09/30(土) 11:41:39>>1
何のためのテンプレよ。
0099デフォルトの名無しさん
2006/09/30(土) 13:37:17(?{ code })
Perlにおいて、埋め込まれたPerlコードを実行します
(??{ code })
Perlにおいて、埋め込まれたPerlコードを実行してその結果を正規表現を表すものとして使用
ができる、windows用の置換ツールってありますか?
0100デフォルトの名無しさん
2006/09/30(土) 14:03:110101デフォルトの名無しさん
2006/09/30(土) 14:08:17Perl
0102デフォルトの名無しさん
2006/09/30(土) 19:01:09ただし、次のように、bbbが<x>と</x>に囲まれている場合は除きます。
また、aaa,bbbは0個以上の任意の文字列とします。
言語はrubyです。
<x>aaabbbccc</x>
自分でやってみた結果はこうです。
/(?!<x>.*)bbb(?!.*<\/x>)/
これでうまくいっているように見えますが、
他に書き方があればよろしくお願いします。
0103デフォルトの名無しさん
2006/09/30(土) 19:03:35aaa,cccは0個以上の任意の文字列とします。
でしたorz
0104デフォルトの名無しさん
2006/09/30(土) 19:14:42XMLだとタグが1行におさまっているとは限らないわけで
<x
>
aaabbbccc
</x>
とかも考えられるでしょ?
そんなのを正規表現でやる方がおかしい
0105デフォルトの名無しさん
2006/09/30(土) 19:22:090106デフォルトの名無しさん
2006/09/30(土) 20:00:16なので、実は括弧は目印にすぎませんから、形式は何でもいいんです。
ただ、マッチした部分を括弧で囲みたいわけです。しかし、すでに括弧で囲まれている場合は、
不要なんです。入れ子にしたくないわけです。
0107デフォルトの名無しさん
2006/09/30(土) 20:34:17「括弧」って何の話?
0108デフォルトの名無しさん
2006/09/30(土) 20:46:18html = HTMLtokens.new('ファイル名l')
html.between("x") { |i| html.tokens[i] = html.tokens[i].gsub(/b+/, 'c') }
0109デフォルトの名無しさん
2006/09/30(土) 20:49:14正規表現にふさわしくない題材だと思うね
0110デフォルトの名無しさん
2006/09/30(土) 20:51:18広告のカットやテーブル項目の並び替えとかスクリプトからできるんだが。
マニュアルが無いせいなのかな。
0111デフォルトの名無しさん
2006/09/30(土) 20:56:490112デフォルトの名無しさん
2006/09/30(土) 20:57:56あまりいいたくはないが、「Perlの正規表現に準拠」ってなるのか。
Perlから正規表現の道に入ったからさ。
0113デフォルトの名無しさん
2006/09/30(土) 21:00:27漢字が扱えるのでPOSIXなのはboostだと思う。
0114デフォルトの名無しさん
2006/09/30(土) 21:30:500115デフォルトの名無しさん
2006/09/30(土) 21:37:12というか、何でもかんでも正規表現で扱えるわけじゃないというのを
知らない奴が多過ぎる。自分の周りでもXMLのパーサを一生懸命
正規表現で書こうとしてる奴がいたりして、辟易する
0116デフォルトの名無しさん
2006/09/30(土) 21:38:550117デフォルトの名無しさん
2006/09/30(土) 21:41:18あとWEB上のルールのいいかげんなHTMLの処理も出来ないから、
例えばショップのWEBページから価格を吸い出して
XMLに保存という時にも困る。
0118デフォルトの名無しさん
2006/09/30(土) 23:37:56納得すんなよ
0119デフォルトの名無しさん
2006/10/01(日) 00:37:01Perlの正規表現はPOSIXのそれを超えている。
0120デフォルトの名無しさん
2006/10/01(日) 00:45:58・仕様の合わせ込みが厄介なこと、
・DFAのエンジンとの親和性が低いこと
・コストの計算が難しいこと(計算量の爆発の予測しにくい)
・最短の一致を見つけるのが遅くなる(ifの条件式とかは別に最短でも成立する)
原因は縦型探索で比較の順序の影響を受けることにある。
0121デフォルトの名無しさん
2006/10/01(日) 01:12:01盛り込まれてる。
最初の版だとPerl準拠のもあったんだけど、削除されてしまった。
0122デフォルトの名無しさん
2006/10/01(日) 01:18:43POSIXだと完全な最長一致だから並列実行で設計できるが
Perl式だと互換性のすり合わせが難しくなるだろ。
(最初に見つけた結果で探索を打ち切るのだがその順番が)
0123デフォルトの名無しさん
2006/10/01(日) 01:28:31やっぱりPerlは詰め込み杉ってところだよね。
最近では、java.util.regex をよく使ってる。
javascriptだとブラウザ対応でどこでも動くから、
javascript の正規表現を知っておくと良さそうだね。
メジャーな実装としては、perl, ruby, javascript (java, c$)ってところかな?
ありがとね〜
0124デフォルトの名無しさん
2006/10/01(日) 13:10:09>XMLを正規表現でやるのはやっつけ仕事の時だけ
それって某社の取締役最高技術責任者のこと?
0125デフォルトの名無しさん
2006/10/04(水) 13:28:030126デフォルトの名無しさん
2006/10/04(水) 17:18:080127デフォルトの名無しさん
2006/10/04(水) 17:35:350128デフォルトの名無しさん
2006/10/04(水) 21:05:150129デフォルトの名無しさん
2006/10/10(火) 10:28:060130デフォルトの名無しさん
2006/10/10(火) 11:54:44全角記号の定義とエンコードによってまちまちなんでね?
0131デフォルトの名無しさん
2006/10/10(火) 22:37:500132デフォルトの名無しさん
2006/10/10(火) 22:53:33あとついあったよね、会談。
はずしてやんの。
0133デフォルトの名無しさん
2006/10/10(火) 23:03:190134デフォルトの名無しさん
2006/10/11(水) 00:11:47あ
は
???
0135デフォルトの名無しさん
2006/10/11(水) 12:28:34unicode
つか、それぞれのエンコードの定義マップ見たらいいわけ?
0136デフォルトの名無しさん
2006/10/11(水) 17:12:53取得したいのですが、どういう正規表現で可能でしょうか?
具体的には例えば
<a href=xxx.mpg><img src=/image/zzz.jpg></a>
このようなものから/image/zzz.jpgを抜き出したいのです。
WEB巡回する用途なので、コロンやらパスやらのフォーマットは
多様なものに対応したいと思っています。言語はPHPです。
0137デフォルトの名無しさん
2006/10/11(水) 18:37:030138デフォルトの名無しさん
2006/10/12(木) 02:14:12どのようにしたらいいでしょうか?
0139デフォルトの名無しさん
2006/10/12(木) 05:14:060140デフォルトの名無しさん
2006/10/12(木) 10:15:40aaa xxx
bbb
マッチさせたくない文字
aaa xxx
yyy
bbb
perlのマルチラインモードで「aaa.*?$^bbb」でいけると思ったのですがだめでした。
上記の条件にあう正規表現を教えてください。
0141デフォルトの名無しさん
2006/10/12(木) 15:38:350142デフォルトの名無しさん
2006/10/12(木) 20:11:01すいません。
yyybbbにもマッチさせないです。
というか、正規表現のマルチラインで
改行を、$^で指定できないのでしょうか?
0143デフォルトの名無しさん
2006/10/12(木) 20:28:19/aaa.*¥nbbb/;
0144デフォルトの名無しさん
2006/10/13(金) 03:19:28/aaa([^\n])\nbbb/
でいいんじゃないか?
0145近藤雅彦
2006/10/13(金) 11:18:33aaa xxx
bbb
マッチさせたくない文字
aaa xxx
yyy
bbb
無理
bbbはどうすんのさ
0146近藤雅彦
2006/10/13(金) 11:19:29否定先読みでも使っとけ
0147デフォルトの名無しさん
2006/10/13(金) 11:36:46^が改行の直後にもマッチ
$が改行の直前にもマッチ
するようになるだけ。したがって$^で改行それ自体を指定する
ということにはならない。
143のいうように普通に\nとして書け。
0148デフォルトの名無しさん
2006/10/13(金) 13:28:10xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
}
xxxの中に、hogeが一切どこにも入らない if () { .... } を検索したいのですが、
perlの正規表現でできますか?
0150デフォルトの名無しさん
2006/10/13(金) 20:53:44できない!
M/if[^}]*(?!hoge)}/m
0151デフォルトの名無しさん
2006/10/13(金) 21:41:48みたいな正規表現を見かけたのですが、
.+? ってどうして
.+ じゃいけないんですかね
0152デフォルトの名無しさん
2006/10/13(金) 21:49:03<b>...</b>...<b>...</b>
の外側の<b>〜</b>にマッチしてしまったりするから
0154デフォルトの名無しさん
2006/10/14(土) 20:48:54リンクをつけたいのですが、どうしても上手くいきません。
単に正規表現が間違ってるだけかと思われるのですが、
普通、httpにリンクをかける場合どのような正規表現をもちいればいいのでしょうか?
今、phpでpreg_match('/^http://+[a-zA-Z0-9\.\-\=\/\%\$\?\&\_]$'、$a)のような
変な書き方をしているですが、どうかよろしければ正しい方法を教えていただけないでしょうか?
0155デフォルトの名無しさん
2006/10/14(土) 23:03:35難しくてわからないんだよぉ〜。
どうしてもifから}間での間に文字が入らないの先読み否定がうまくできない・・・
なんてどうかしら?
0157デフォルトの名無しさん
2006/10/15(日) 02:33:45www.hoge.comですよ
の ですよ もひっかからね?
0158デフォルトの名無しさん
2006/10/15(日) 04:40:33googleで「URLの正規表現」を検索すれば
そういうのは引っかからないで欲しいですよね。
www.hoge.com/search.php?query=ですよ
こゆのは引っかかって欲しいですよね♪
URI(URL)の正規表現なんて、どこまでを通すか通さないのかのさじ加減が難しいのかと思うのですです。
0160デフォルトの名無しさん
2006/10/15(日) 09:54:53wikipediaへなんかのリンクだと日本語も使われるので、それは引っ掛けてほしいところ。
0161デフォルトの名無しさん
2006/10/16(月) 13:53:14なんてね
0162デフォルトの名無しさん
2006/10/18(水) 00:01:02安易に
https?://[!-~]+[=\?&]?\S+
日本語の前に来る記号にどんな種類があるか知らないけど w
0163デフォルトの名無しさん
2006/10/18(水) 20:04:420164デフォルトの名無しさん
2006/10/18(水) 20:39:030165デフォルトの名無しさん
2006/10/18(水) 23:11:32URLにマッチする正規表現が載ってなかったっけ?
0166デフォルトの名無しさん
2006/10/18(水) 23:27:450167デフォルトの名無しさん
2006/10/19(木) 16:26:13http://d.hatena.ne.jp/palmo/20060724/rangeop
>165
http://www.din.or.jp/~ohzaki/regex.htm#URI
0168デフォルトの名無しさん
2006/10/20(金) 18:30:29asdfasdf
asdfasdfasdf
一行目の asdf だけに一致させたい場合
どうすればよいのでしょうか?
0169デフォルトの名無しさん
2006/10/20(金) 18:50:510170デフォルトの名無しさん
2006/10/20(金) 19:20:33アリガ�d
0171デフォルトの名無しさん
2006/10/24(火) 02:14:14(a|b|c) と ([abc]) の場合はどうでしょう?
0172デフォルトの名無しさん
2006/10/24(火) 09:35:56文字クラスで十分なときは文字クラスの方が速いらしいが
気になるならベンチとって確認しろ。
0173デフォルトの名無しさん
2006/10/25(水) 17:04:24str = ["<あ>-<#>-<い>--<#>-<1>-<2>-<#>-<x>-<y>"]
という形があるとして、
一番後ろの<#>から後ろ(<x>-<y>)を抜き出すにはどうすればいいですか?
0174デフォルトの名無しさん
2006/10/25(水) 18:04:57str[0].scan(/<.>-<.>/)[-1]
str[0].scan(/<#>-([^#]+)\Z/)[0][0]
0176デフォルトの名無しさん
2006/10/26(木) 02:20:080177デフォルトの名無しさん
2006/10/26(木) 05:32:250178デフォルトの名無しさん
2006/10/26(木) 06:14:22心配すんな正常だ
0179デフォルトの名無しさん
2006/10/26(木) 14:32:100180デフォルトの名無しさん
2006/10/26(木) 16:19:38これでdocomo.ne.jpがひっかからないのですが
どうしてでしょうか?
0181デフォルトの名無しさん
2006/10/26(木) 16:59:450182180
2006/10/26(木) 17:01:350183デフォルトの名無しさん
2006/10/26(木) 17:50:38*ってよく使うよ。
∧_ ∧
(´∀` )
(⊃⌒*⌒⊂)
/__ノ''''ヽ__)
0184デフォルトの名無しさん
2006/10/26(木) 23:50:28まあ♂♀はあるだろうな。。。
0185デフォルトの名無しさん
2006/10/27(金) 00:53:540186デフォルトの名無しさん
2006/10/30(月) 20:50:52<em><q>text</em></q>
のように要素が重なり合ったときにエラーを返すようにしたいんですが、
どうすればいいか教えていただけませんか?
かーなーりすれ違い♪
HTML-lintに通すと良いかも♪
0188デフォルトの名無しさん
2006/10/31(火) 19:03:40この形式からtarachan.txtの入っているフォルダ名を得るにはどう記述したら良いのでしょう。
0189デフォルトの名無しさん
2006/10/31(火) 19:24:27最良かどうかは解りませんが/(^\".*?\\.*?)[^\\]*?\"/で出来ました。
0190デフォルトの名無しさん
2006/10/31(火) 19:27:55/(^\".*?)[^\\]*?\"/
でも大丈夫なようですね。
0191デフォルトの名無しさん
2006/10/31(火) 21:04:110192デフォルトの名無しさん
2006/10/31(火) 21:35:23念のため聞いておくが、そのような記述が必ずしもHTMLの仕様に逆らってはいないことを知っての上でそうしたいんだな?
0193デフォルトの名無しさん
2006/11/01(水) 11:06:29テストサーバでオープンになっているポートを知りたいのですが。
0194nobodyさん
2006/11/01(水) 18:28:29アルファベットおよびアルファベット+数字で構成された語句を抜き出し
ているのですが、数字だけのものも抜き出してしまいます。
年度など、数字だけで構成されているものを除外するにはどうすればいい
でしょうか?
どうもうまくいかないもので。よろしくお願いします。
0195デフォルトの名無しさん
2006/11/01(水) 18:32:52その正規表現で動いたら奇跡だな。
[a-zA-Z][a-zA-Z0-9.]*
0196194
2006/11/01(水) 18:49:30動いてますよ。文字は全て全角なので。(ちょっとわけありで)
その上で、数字だけを除外するにはどうすれば良いのか、お聞きした
いのです。
0197デフォルトの名無しさん
2006/11/01(水) 18:51:10[a-zA-Z0-9.]*[a-zA-Z][a-zA-Z0-9.]*
こんなのかな
0198194
2006/11/01(水) 19:04:08それがマッチするんですよ。こんな感じに
Array ( [0] => 2005 [1] => IEEE1394 [2] => 24 [3] => Index
[4] => Java [5] => API [6] => JMF [7] => USB2.0 )
それで、困っておるわけです。
0200199
2006/11/01(水) 19:18:440201デフォルトの名無しさん
2006/11/01(水) 19:21:10それの不十分さを>>197が補正してるんだな。
0203デフォルトの名無しさん
2006/11/01(水) 19:30:22お前ら.のエスケープ忘れてる。
0205194
2006/11/01(水) 19:42:14どんな意味があるのか、教えていただけるとありがたいのですが
0206デフォルトの名無しさん
2006/11/01(水) 19:44:05aa -> aaにマッチ
と同じ
0207デフォルトの名無しさん
2006/11/02(木) 02:29:58[] の中なんだから、エスケープの必要はないっしょ。
世の中には記号類と見ればやたらエスケープしたがる人がいるのはよく見るが。
0208デフォルトの名無しさん
2006/11/03(金) 00:54:08$string = "(foo1)bar1 (foo2 bar2(foo3))bar3((foo4) bar4)";
echo preg_replace(pattern, "", $string);
この例で「bar1 bar3」の出力を期待しますが
/\(.+\)/ なら当然何も残りません。非欲張りの /\(.+?\)/ では入れ子の
部分でおかしくなって「bar1 )bar3 bar4)」となります。
どうかお知恵をお貸しください。
0209デフォルトの名無しさん
2006/11/03(金) 00:57:09http://capslockabcjp.kitunebi.com/handmade.html
0210デフォルトの名無しさん
2006/11/03(金) 09:14:04while ($string =~ s/\([^(]*?\)//g) {}
print $string;
0211208
2006/11/04(土) 12:36:54ややこしそうなんで不等号に置換してstrip_tagsします。
0212デフォルトの名無しさん
2006/11/05(日) 16:58:33PerlでURLの書式として正しいか、URLとして使用できない文字が含まれていないかをチェックする正規表現教えて
日本語ドメインには対応しなくていいから
0213デフォルトの名無しさん
2006/11/05(日) 17:10:01>>1のリンク先くらい嫁
0214デフォルトの名無しさん
2006/11/09(木) 09:17:272ちゃんねるのBEの表記を正規表現で表すとどうなるのでしょうか?
0215デフォルトの名無しさん
2006/11/11(土) 12:30:37>1のリンク先くらい嫁
0216デフォルトの名無しさん
2006/11/11(土) 15:21:58htmltodatに入ってる『m/<dt>([0-9]+).+?(?:"mailto:(.+?)">)?<b> (.*?) </b>.*?投稿日: (.*?)<br><dd> ?(.*)<br><br>/mi』じゃダメなんですか?
0217デフォルトの名無しさん
2006/11/11(土) 16:12:17まちBBSの書式なんか知らん。
befor-afterのサンプルぐらい出せ。
0218デフォルトの名無しさん
2006/11/12(日) 06:51:190219デフォルトの名無しさん
2006/11/12(日) 07:05:050220216
2006/11/12(日) 09:30:35『<dt>149 名前:<a href="mailto:sage"><b> 東京都名無区 </B></a> 投稿日: 2006/11/08(水) 10:26:08 ID:4jNjzvOE<br><dd> 白山ラーメンは営業時間がちょっとね。 <br><br>
<dt>150 名前:<font color="#008800"><b> 東京都名無区 </b></font> 投稿日: 2006/11/08(水) 19:20:35 ID:xKWAFsLU<br><dd> じゃあ素材は中国産か・・。 <br><br>』
after
『東京都名無区<>sage<>2006/11/08(水) 10:26:08 ID:4jNjzvOE<>白山ラーメンは営業時間がちょっとね。 <>
東京都名無区<><>2006/11/08(水) 19:20:35 ID:xKWAFsLU<>じゃあ素材は中国産か・・。 <>』
こういう感じにしたいんです。
0221デフォルトの名無しさん
2006/11/14(火) 16:18:040222デフォルトの名無しさん
2006/11/14(火) 19:34:53grepでピリオドとbackreferenceを使ってちょ。
0223デフォルトの名無しさん
2006/11/14(火) 19:41:560224デフォルトの名無しさん
2006/11/15(水) 00:09:45どう考えても「規則表現」あたりだろーが。
それに「せいきひょうげん」とか口に出して言うのって
なんか恥ずかしいじゃねーか。
0225デフォルトの名無しさん
2006/11/15(水) 01:32:30考えないで「勉強」してよ。
0226デフォルトの名無しさん
2006/11/15(水) 22:52:020227デフォルトの名無しさん
2006/11/15(水) 23:03:250228デフォルトの名無しさん
2006/11/16(木) 00:00:14macafeeやMacAfeeにはヒットしない正規表現はどう書けばよいのでしょうか。
0229デフォルトの名無しさん
2006/11/16(木) 00:07:560230デフォルトの名無しさん
2006/11/16(木) 00:22:07とりあえず面白そうなので
http://jbbs.livedoor.jp/bbs/read.cgi/computer/1929/1038588508/
で聞いてみてはどうです?
0231デフォルトの名無しさん
2006/11/17(金) 16:59:43賛同++
0232デフォルトの名無しさん
2006/11/20(月) 04:23:050233デフォルトの名無しさん
2006/11/20(月) 07:49:260234デフォルトの名無しさん
2006/11/21(火) 13:00:04[AaAa][IiIi][UuUu]
という正規表現を分解して、マッチする文字列を出してくれるツール、
もしくはC#あたりでそういった方法などは無いでしょうか?
0235デフォルトの名無しさん
2006/11/21(火) 13:17:55*とかあったらどうすんのさ。
本当に正規表現関連の質問なのか?
組み合わせ論の話なんじゃ?
0236デフォルトの名無しさん
2006/11/21(火) 13:33:47*とかはありません。
[Aa]のパターンだけなんですが、如何せん量が多くて
自分で分解して1つ1つ書いていくのは不可能なのです。
何か良い方法は無いか探してるんですが・・・
0237デフォルトの名無しさん
2006/11/21(火) 13:42:420238デフォルトの名無しさん
2006/11/21(火) 13:58:540239デフォルトの名無しさん
2006/11/21(火) 15:10:310242デフォルトの名無しさん
2006/11/21(火) 17:08:070243デフォルトの名無しさん
2006/11/21(火) 19:22:570244234
2006/11/21(火) 19:42:250245デフォルトの名無しさん
2006/11/21(火) 20:38:55Maxima 5.9.1 http://maxima.sourceforge.net
Using Lisp Kyoto Common Lisp GCL 2.6.5 (aka GCL)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.
(%i1) expand((a1+a2+a3+a4)*(i1+i2+i3+i4)*(u1+u2+u3+u4));
(%o1) A4 i4 u4 + A3 i4 u4 + A2 i4 u4 + A1 i4 u4 + A4 i3 u4 + A3 i3 u4
+ A2 i3 u4 + A1 i3 u4 + A4 i2 u4 + A3 i2 u4 + A2 i2 u4 + A1 i2 u4 + A4 I1 u4
+ A3 I1 u4 + A2 I1 u4 + A1 I1 u4 + A4 i4 u3 + A3 i4 u3 + A2 i4 u3 + A1 i4 u3
+ A4 i3 u3 + A3 i3 u3 + A2 i3 u3 + A1 i3 u3 + A4 i2 u3 + A3 i2 u3 + A2 i2 u3
+ A1 i2 u3 + A4 I1 u3 + A3 I1 u3 + A2 I1 u3 + A1 I1 u3 + A4 i4 u2 + A3 i4 u2
+ A2 i4 u2 + A1 i4 u2 + A4 i3 u2 + A3 i3 u2 + A2 i3 u2 + A1 i3 u2 + A4 i2 u2
+ A3 i2 u2 + A2 i2 u2 + A1 i2 u2 + A4 I1 u2 + A3 I1 u2 + A2 I1 u2 + A1 I1 u2
+ A4 i4 u1 + A3 i4 u1 + A2 i4 u1 + A1 i4 u1 + A4 i3 u1 + A3 i3 u1 + A2 i3 u1
+ A1 i3 u1 + A4 i2 u1 + A3 i2 u1 + A2 i2 u1 + A1 i2 u1 + A4 I1 u1 + A3 I1 u1
+ A2 I1 u1 + A1 I1 u1
(%i2)
0246デフォルトの名無しさん
2006/11/21(火) 21:02:47aa1="A a $(B#A(B $(B#a(B";aa2="I i $(B#I(B $(B#i(B";aa3="U u $(B#U(B $(B#u(B"; for bb1 in $aa1; do for bb2 in $aa2; do for bb3 in $aa3; do echo $bb1$bb2$bb3; done; done; done
0247デフォルトの名無しさん
2006/11/21(火) 22:37:020248デフォルトの名無しさん
2006/11/21(火) 22:57:56文字の範囲が決まってる(アルファベットだけとか)なら、
全組み合わせのテキストファイル生成して、
エディタで引っ掛けるなりgrepするなりするってのはどう?
0249デフォルトの名無しさん
2006/11/21(火) 22:59:14だからその
>全組み合わせのテキストファイル生成
してくれるツールは無いかって聞いてるんじゃん。
0250デフォルトの名無しさん
2006/11/21(火) 22:59:39ならやるべきことはリストで出すことじゃなくて、
今の正規表現を図か何かにわかりやすく起こして
説明してわかってもらうことじゃないの?
0251デフォルトの名無しさん
2006/11/21(火) 23:00:51ああ、いや、例えばアルファベット小文字10文字って決まってたら
aaaaaaaaaaからzzzzzzzzzzまで全部テキストファイルに書いて
引っ掛ける、ってな意味。限定されてないと無理だけど。
0252デフォルトの名無しさん
2006/11/21(火) 23:03:13だからその全パターンを正規表現からおこして列挙してくれるツ(ry
0253デフォルトの名無しさん
2006/11/21(火) 23:08:49--- xxx.vbs
Option Explicit
Dim X
X = "[AaAa][IiIi][UuUu]"
With New RegExp
.Global = True
.Pattern = "\[([^\]]*)\]"
Dim Matches
Set Matches = .Execute(X)
Call Foo(Matches, 0, "")
End With
Private Sub Foo(Matches, Level, String)
If Level < Matches.Count Then
Dim S
S = Matches.Item(Level).SubMatches(0)
Dim I
For I = 1 To Len(S)
Call Foo(Matches, Level + 1, String + Mid(S, I, 1))
Next
Else
WScript.StdOut.WriteLine String
End If
End Sub
0254デフォルトの名無しさん
2006/11/21(火) 23:37:06ダウンロード一桁とかじゃないだろうな(w
0255デフォルトの名無しさん
2006/11/22(水) 01:45:280256デフォルトの名無しさん
2006/11/22(水) 13:32:00サイズがでかすぎるテキストファイルになって
重くて相手にされない予感
0257デフォルトの名無しさん
2006/11/22(水) 15:46:11とか入って来たら死にそうな感じがするが
0258デフォルトの名無しさん
2006/11/22(水) 17:03:54事前に計算量を予測できる、
UTF-8でも大丈夫なアルゴリズムがあるの。
0259デフォルトの名無しさん
2006/11/22(水) 17:25:310260デフォルトの名無しさん
2006/11/22(水) 17:40:361000超えたら中止とか設定するの。
0261デフォルトの名無しさん
2006/11/22(水) 20:00:10それ、何かの解決策になってる?
0262デフォルトの名無しさん
2006/11/22(水) 20:38:16目的を果たしてないぞw
0263デフォルトの名無しさん
2006/11/22(水) 22:50:13組み合わせだすなんて不毛なことより
どっちかというと視覚化のほうをやりたい。
0264デフォルトの名無しさん
2006/11/23(木) 18:38:560265デフォルトの名無しさん
2006/11/23(木) 20:56:430266デフォルトの名無しさん
2006/11/23(木) 21:50:360267デフォルトの名無しさん
2006/11/23(木) 22:12:110268デフォルトの名無しさん
2006/11/23(木) 22:29:560269デフォルトの名無しさん
2006/11/23(木) 22:58:24よろしいでしょうか?
0270デフォルトの名無しさん
2006/11/24(金) 02:46:080271デフォルトの名無しさん
2006/11/24(金) 17:20:28( ´∀`)< 問題:「同じ数の繰り返しがない数字列すべて」を示す正規表現は?
( ) \_____
| | |
(__)_)
0272デフォルトの名無しさん
2006/11/24(金) 17:32:26ちったぁ自分で考えろや
0273デフォルトの名無しさん
2006/11/24(金) 19:46:160274デフォルトの名無しさん
2006/11/24(金) 19:54:56?
0275デフォルトの名無しさん
2006/11/24(金) 21:51:15おれは、「すべて」の意味もわかんない
0276デフォルトの名無しさん
2006/11/25(土) 10:42:10>>1
0277デフォルトの名無しさん
2006/11/25(土) 16:00:53同じ数字が隣にこない、と言えばいいだろうか
113はダメ、131はおk
>>275
全部です。数字一個の列も数字百個の列も表現できろってことです。
俺のまわりの連中は馬鹿だから誰もわかりません
勿論俺もわかりません
0278デフォルトの名無しさん
2006/11/25(土) 16:26:360279デフォルトの名無しさん
2006/11/25(土) 16:28:08だとしたらこうか。
((\d)(?!\1))+
0280デフォルトの名無しさん
2006/11/25(土) 16:32:01((\d)(?!\2)){2,}
0281デフォルトの名無しさん
2006/11/25(土) 20:16:00>>280
全然ダメ
>>277
987654321
1
98
988
678678
これはどれがマッチするとか例をかいたら?
0282デフォルトの名無しさん
2006/11/25(土) 20:26:050283デフォルトの名無しさん
2006/11/25(土) 21:18:320284デフォルトの名無しさん
2006/11/25(土) 21:47:19ヒントは
?!
0285デフォルトの名無しさん
2006/11/25(土) 22:35:06-----
Option Explicit
Dim X, R
For Each X In Array("1", "113", "131", "987654321", "1", "98", "988", "678678")
With New RegExp
.Pattern = "^(?:(\d)(?!\1))*$"
If .Test(X) Then R = "Match" Else R = "Not Match" End If
WScript.StdOut.WriteLine X & ": " & R
End With
Next
-----
1: Match
113: Not Match
131: Match
987654321: Match
1: Match
98: Match
988: Not Match
678678: Match
0286デフォルトの名無しさん
2006/11/26(日) 05:29:10○987654321
○1
○98
×988
○678678
この正規表現を連接・選択・スターだけで書けって言うんだ…
無茶しやがって
0287デフォルトの名無しさん
2006/11/26(日) 12:05:37同じ数字が連続するのは10種類しかない
0288デフォルトの名無しさん
2006/11/26(日) 12:52:580289デフォルトの名無しさん
2006/11/26(日) 13:43:10オライリーの本を読めば正解が分かるな
ヒントは否定先読み
>>1
のリンク先を全て読んでもいいけどな
0290デフォルトの名無しさん
2006/11/26(日) 14:50:35Perl5など最近の言語処理系がサポートしているいわゆる正規表現が既に
本来の意味での正規表現ではなくなっているというのは有名な話だけど
じゃあ、そのいわゆる正規表現が表現できる言語のクラスってどんなの
なんだろう?色んなところの例を見た限りでは、少なくとも文脈自由言語の
一部を表現できるようだけど
0291デフォルトの名無しさん
2006/11/26(日) 17:25:55だから自然言語処理で、正規表現がよく使われたりする。
0292デフォルトの名無しさん
2006/11/26(日) 20:03:21つまり、「任意の」文脈自由文法をPerl5などで拡張された「いわゆる」正規表現
で表現できるってこと?もしそうだったら、どっかにそれを証明した論文がある
はずなんだけど論文へのポインタか何か知ってたら教えて
0293デフォルトの名無しさん
2006/12/06(水) 00:55:21[00:08.05]
[00:20.32]
こんなのを
[00:00]
[00:08]
[00:20]
に書き換える正規表現教えてください
0294デフォルトの名無しさん
2006/12/06(水) 01:28:440295デフォルトの名無しさん
2006/12/06(水) 03:42:17s/\(\[[0-9][0-9]:[0-9][0-9]\)\.[0-9][0-9]]/\1]/
0297デフォルトの名無しさん
2006/12/07(木) 00:53:22括弧の中に括弧っていいんですか?
/(aaa(bbb)ccc)/
0298デフォルトの名無しさん
2006/12/07(木) 01:26:390299デフォルトの名無しさん
2006/12/07(木) 03:42:490300デフォルトの名無しさん
2006/12/07(木) 03:50:18balanced parenthesesは拡張された正規表現でどう書くの?
0301デフォルトの名無しさん
2006/12/07(木) 09:11:27perlの正規表現のマニュアルの (??{ code }) のところにそのものずばりの例がある。
$re = qr{
\(
(?:
(?> [^()]+ )# Non-parens without backtracking
|
(??{ $re })# Group with matching parens
)*
\)
}x;
ttp://perldoc.perl.org/perlre.html
0302デフォルトの名無しさん
2006/12/07(木) 17:51:10\(
(?:
(?> [^()]+ )# Non-parens without backtracking
|
(??{ $re })# Group with matching parens
)*
\)
は(??{ code })でコードが埋め込まれることで言語依存になってしまうが
拡張された正規表現ではある。しかしその外側は正規表現ではないのでは?
単なるperlの文に見えるのだが。
0303デフォルトの名無しさん
2006/12/08(金) 01:36:15こーゆーのもある(,NETね)
Regex re = new Regex(@"^
(?>
\( (?<LEVEL>) # On opening paren push level
|
\) (?<-LEVEL>) # On closing paren pop level
|
(?! \( | \) ) . # Match any char except ( or )
)+
(?(LEVEL)(?!)) # If level exists then fail
$", RegexOptions.IgnorePatternWhitespace);
0304デフォルトの名無しさん
2006/12/08(金) 19:50:29javascriptだけは残ってしまいます。
正規表現でjavascriptを消去するやり方はないんでしょうか?
色々試してもさっぱりダメ……
0305デフォルトの名無しさん
2006/12/08(金) 20:46:440306デフォルトの名無しさん
2006/12/09(土) 03:54:02行儀よく <!-- hoge --> に囲まれてれば
JavaScript だって一緒に消されるっしょ?
うまいことコメントアウトされてないようなら
先に script 回りだけ同じようにばっさり切ればいいし
0307デフォルトの名無しさん
2006/12/09(土) 16:17:090308デフォルトの名無しさん
2006/12/10(日) 11:42:44まあ、君の言うことは正しいんだけど、その「終了タグ」を
見つけるのが大変と言うことだ。
文字列やコメント中に </script> とか書いてるのをきちんと
はじくのはちょっと骨が折れる。
0309デフォルトの名無しさん
2006/12/10(日) 19:35:000310デフォルトの名無しさん
2006/12/10(日) 19:51:58いてえよ
0311デフォルトの名無しさん
2006/12/14(木) 13:00:06それ Unicode で
http://openmya.hacker.jp/hasegawa/public/20061209/momiji.html
xss考慮するとけっこう対応は大変だぞ
0312デフォルトの名無しさん
2006/12/15(金) 13:57:42判りにくいと思いますので例を言うと
<font><a href="(.*?)" target="_blank">Recycled Niceguys</a></font color="red">
<font><a href="(.*?)" target="_blank">(.*?)</a></font color="red">
こんな感じに変換にしたいのです.
今自分で考えたのは
((?:<.*?>)*)(?:.*?)((?:<.*?>)*)
group(1) + "(.*?)" + group(2)
こうなのですがうまく変換できません.
何処が間違っているのでしょうか?
ご教授お願いします.
0313デフォルトの名無しさん
2006/12/15(金) 17:49:10value = ">"
を考慮するかとか書いてないし
よって回答不能
0314デフォルトの名無しさん
2006/12/15(金) 22:18:330315デフォルトの名無しさん
2006/12/15(金) 22:24:290316デフォルトの名無しさん
2006/12/16(土) 02:22:56URLの test.php?a=123&b=456 から a が欲しいので
/a\=(.+?)\&/
としていたのですが、test.php?a=123 だけで終わる場合があることが分かったのですが、
&または行末としたいのですが、
/a\=(.+?)[\&$]/
では行末の場合ヒットしてくれません
ご教授願えないでしょうか?
0317デフォルトの名無しさん
2006/12/16(土) 02:33:12じゃ駄目なの?
0318デフォルトの名無しさん
2006/12/16(土) 13:31:22/a=([^&]+)/
0319デフォルトの名無しさん
2006/12/16(土) 13:37:32PHPなら
$_GET["a"]
じゃあかんの?
0320デフォルトの名無しさん
2006/12/18(月) 06:21:340321デフォルトの名無しさん
2006/12/20(水) 06:06:000322デフォルトの名無しさん
2006/12/25(月) 19:36:44Flashで読み込む用に、
kuji=***(ランダムで変わる大吉から凶まで)
という文字列だけを出力するkuji.phpを作りました。
さらに、この***の部分だけをmain.phpに読み込んで
ランダムで変わる部分だけを表示したいのですが、
include('kuji.php');
で読み込んだあと、「kuji=」の部分を削って***だけ表示するには
どのようにすれば良いのでしょうか?PHPのバージョンは4.0.6です。
0323デフォルトの名無しさん
2006/12/25(月) 20:08:170324デフォルトの名無しさん
2006/12/25(月) 22:14:59「ジョージアのコーヒー」
「コーヒーはジョージア」
で
「コーヒー」「ジョージア」
だけを使って2文にマッチさせたい。
ジョージア.*コーヒー
だと1文目はヒットするが、2文目はヒットしない。
ではなくって?釣り?
0327デフォルトの名無しさん
2006/12/25(月) 23:26:43たとえば
「ジョージアのコーヒー美味しいね。」
「ジョージアよりポッカの方が良い。」
という場合もあった場合に、一つ目だけをマッチさせて、二つ目を省きたいのです。
検索条件のand検索の様な事はできるのかなと思って質問しました。
0328デフォルトの名無しさん
2006/12/25(月) 23:29:12↓
という場合もあった場合に、一文目だけをマッチさせて、二文目を省きたいのです。
0329デフォルトの名無しさん
2006/12/26(火) 00:12:35基本的には組み合わせの数だけorでつなぐ正規表現になると思う
例えばこんな感じで
(ジョージア.*コーヒー|コーヒー.*ジョージア)
0330デフォルトの名無しさん
2006/12/26(火) 01:21:40正規表現でスマートに実装できるかなと思ったのですが。
単語が3個4個と増えてくると結構コードが汚くなってきますよね。
とりあえず今は仕様ということで諦めるしかない様ですね。
0331デフォルトの名無しさん
2006/12/26(火) 02:04:09325みたくorでマッチさせておいて、その後に「全部マッチしたやつ」を
探せばいいのでは
0332デフォルトの名無しさん
2006/12/27(水) 02:13:250333デフォルトの名無しさん
2006/12/27(水) 13:37:26----
ABCD
こんにちは
こんばんわ
さようなら
EFGH
----
上のABCDとEFGHに挟まれる複数行の文字列を
取得するには、どのような記述にしたら
良いでしょうか?
0334デフォルトの名無しさん
2006/12/27(水) 15:22:06http://pc8.2ch.net/test/read.cgi/tech/1156413899/333
0335デフォルトの名無しさん
2006/12/27(水) 16:56:49>>1
のリンク先嫁
0336デフォルトの名無しさん
2006/12/28(木) 12:05:35...where ID like 'EE%' and ID <> 'EEXX'
という条件を正規表現でやろうと思います。
エディタの正規表現検索で確認した感じだと「^(?!EEXX)EE.*$」でいけそうなんですけど、
大丈夫でしょうか?
0337デフォルトの名無しさん
2006/12/28(木) 15:36:43これでいいんだ...。orz
どうも肯定先読みの説明ってどこ見ても意味がとりにくい。
どっかにすっきりした解説がないもんだろうか。
0338デフォルトの名無しさん
2006/12/28(木) 23:20:02掲示板の本文欄の書き込みでの質問です。
<a href=http://www.example.com>ホゲ</a> または
<a href="http://www.example.com">ホゲ</a> から、正規表現を使って、
ホゲ の文字をリンク状態にしてページに表示させたいのですが、
どのようにしたら良いのでしょうか?
お願いします。教えてください。
0339デフォルトの名無しさん
2006/12/28(木) 23:40:12><a href=http://www.example.com>ホゲ</a>
この時点で既にリンクされてるじゃん。
0340デフォルトの名無しさん
2006/12/28(木) 23:49:07”ホ”の前に”>”を入れたいんじゃないのかな?
0341デフォルトの名無しさん
2006/12/29(金) 00:22:46それもまた意味不明
0342デフォルトの名無しさん
2006/12/29(金) 01:46:580343デフォルトの名無しさん
2006/12/29(金) 04:03:330344デフォルトの名無しさん
2006/12/29(金) 22:16:14hogehoge::と書いた時に「::」より前だけヒットさせる正規表現は.*(?=::)と
書いてうまくいっていますが、↑と別に
hogehoge:だけヒットさせるには何と書けばいいのでしょうか?
一応.*(?=:{1})で試したらhogehoge::にも引っかかってしまいますた
0345デフォルトの名無しさん
2006/12/29(金) 23:58:55hogehoge: は引っ掛けたいけど hogehoge:: ははじけばいいの?
hogehoge(?=:[^:])
でどう?
0346デフォルトの名無しさん
2006/12/30(土) 00:00:51そんなにわかりづらいか?
マッチを試みてその結果はあとに影響するけど、注目位置は変えないって
ことだけだと思うんだけど。
0347デフォルトの名無しさん
2006/12/30(土) 10:26:26ありがとう!
> hogehoge: は引っ掛けたいけど hogehoge:: ははじけばいいの?
そうなんです。ですがhogehoge(?=:[^:])だとhogehoge:にも引っかかりませんでした…
あと試したのが↓で、hogehoge::とhogehoge:両方に引っかかってしまいました
.*(?=:(?!:))
難しい・・・他にイイ案はありますでしょうか?
0348345
2006/12/30(土) 13:53:19条件見てC++のソースでも食わせると思ったのだけど違うのかな?
345の条件だと、hogehoge: の':' で行が終わるとマッチしないよ。
hogehoge(?=:(?:[^:]*$))
でどうだろう。
> .*(?=:(?!:))
これだと.*が一個目の:を飲み込んじゃうのを許しちゃうよ。
hogehogeに固定の文字列じゃなくて何らかの正規表現を置きたいなら、
hogehoge部分にコロンがこないという前提を置いていいなら、
[^:]*(?=:(?:[^:]*$))
かな。
いずれにしろ今回だめだというなら条件をもう少し詳しく提示してね。
0349デフォルトの名無しさん
2006/12/30(土) 15:28:212つとも 「正規表現での'|'の前後の文字が無いかまたは + * ? の直前に文字がありません」
というエラーが出て登録できませんでした
プログラミングから縁遠い者がAutohotkeyのスクリプトを書いております
エディタは秀丸を使っているのでスクリプトを所々強調表示したいなーと思い
Hotkey::(コロン2つ)とLabel:(コロン1つ)を別々にヒットさせたいんです
0350345
2006/12/30(土) 16:04:51Autohotkeyも秀丸も使ってないので試せないのだけど(秀丸は昔は使っていた)、
Perlではちゃんとうごいってるっぽいんだけどねえ。
でもちょっと勘違いして変な記述をしていたので直してみた
[^:]+(?=:[^:]*$)
あとエラーメッセージは秀丸の?
あとでインスコして試してみるけど、打ち間違いってことはない?
期待しないところでマッチするのはあってもエラーはないと思うんだけどなあ
0351デフォルトの名無しさん
2006/12/30(土) 16:10:22「その結果はあとに影響する」と言うのがいまいちピンとこない。
でも今まで見た中では一番よくわかる解説だと思う。
[よくない例]
perlreref:
(?=...) ゼロ幅の肯定先読み表明
Microsoft VBScript の RegExp の説明:
肯定先読みを実行する部分式です。
pattern に一致する文字列が始まる位置にある検索文字列と一致します。
一致した文字列は記憶されず、後で使用することはできません。
たとえば "Windows (?=95|98|NT|2000)" は、"Windows 2000" の "Windows"
には一致しますが、"Windows 3.1" の "Windows" には一致しません。
先読み処理では、読み進まれた文字は処理済みとは見なされません。
一致の検出後、次の検索処理は先読みされた文字列の後からではなく、
一致文字列のすぐ後から開始されます。
こんな説明にみんなちゃんと理解できてるの?
0352デフォルトの名無しさん
2006/12/30(土) 16:23:11それでできました!ありがとうござます!
>あとエラーメッセージは秀丸の?
そうです。コピペでやってるんですが>>348だと登録時にエラー出ました
>>350で完璧です!今から意味を理解してみますw
0353デフォルトの名無しさん
2006/12/30(土) 16:28:560354346
2006/12/30(土) 16:57:46んーとね、「結果があとに影響する」というのは
(?=foo).*
マッチを試みるやり方は先読みでないときと同じでマッチに成功したか失敗したかで
その先に進むかどうかが決まる。マッチした部分は保存しないし、注目位置は変化しない
というつもりだったんだけど。
>こんな説明にみんなちゃんと理解できてるの?
説明で理解したってかどちらかというと実際に使ってみてどういう動きをするかで
覚えた感じかなあ。
最初のPerlで実装されたときから使ってるから、ほかの言語での説明はあまり気にしなかったよ。
0356デフォルトの名無しさん
2006/12/30(土) 17:49:48重ね重ねすみません!
あちこちヒットしてしまうようになったのでw
Label:(行末)
だけにヒットするにはどうしたらいいんでしょう・・
秀丸ヘルプを引きながら理解しようとしてますが
[^:]+(?=:[^:]*$)←自分がいじるとことごとく失敗します
0357デフォルトの名無しさん
2006/12/30(土) 18:33:100358デフォルトの名無しさん
2006/12/30(土) 19:33:21一応試したのがこれですw
[^:]+(?=:[^:]*{0}$)
0359デフォルトの名無しさん
2006/12/30(土) 22:46:29よくばりマッチとかでぐぐれ
0360345
2006/12/30(土) 23:58:33AutoHotKeyとやらの解説ページ見たんだけどさ、要は
コロン一つだけのラベル行と、キー定義のコロン二つを見分けたいってこと?
解説ページの記述によればコロン一つの行はラベルとコロンで行が終わってなければ
いけないようなことが書いてるから、357にあるように
^[^:]*;$
にしといて、コロン二つのほうは行のいろんなところに使えるみたいだけど行頭だけに絞るなら
^[^ ]*::
くらいににしとけば?
ラベル名は多分アルファベットだけで記号は使えないような気がするのでその辺で
絞ってもいいけど。
ピンポイントで解決したいこと書くより最終的に何をしたいのかを書いたほうが
いいアドバイスをもらいやすいってのはあると思うよ。
0361デフォルトの名無しさん
2006/12/31(日) 00:15:20詳しい説明ありがとう。
大体理解できた
...と思う。m(_._)m
0362デフォルトの名無しさん
2006/12/31(日) 12:43:33345さん!シンプルに^[^:]*:$と^[^ ]*::で登録しました
>コロン一つだけのラベル行と、キー定義のコロン二つを見分けたいってこと?
そうなんです。説明足らずですみません
よくばりマッチも勉強します
[^:]+(?=:[^:]*$)もなんとか理解できたと思いますw
本当にありがとうございました!感謝感謝です
0363デフォルトの名無しさん
2007/01/01(月) 21:13:05&を&におきかえたいんですけど、
今のところ、&を&に置き換えるという単純なことをしています。
ただこれだと、
&という入力があったら、&という風になってしまいます。
他の実態参照(&文字列;)も、同じようになってしまうので困っています。
正規表現でどのように表現したらよいのでしょうか?
やりたいことは、&を検索したいのですが、
& " <などの実態参照は除外したいです。
0364363
2007/01/01(月) 21:14:30PHPを使っています。
&を&amp;におきかえたいんですけど、
今のところ、&を&amp;に置き換えるという単純なことをしています。
ただこれだと、
&amp;という入力があったら、&amp;amp;という風になってしまいます。
他の実態参照(&文字列;)も、同じようになってしまうので困っています。
正規表現でどのように表現したらよいのでしょうか?
やりたいことは、&を検索したいのですが、
&amp; &quot; &lt;などの実態参照は除外したいです。
0365デフォルトの名無しさん
2007/01/01(月) 21:29:44&amp;を&に置き換えた後&を&amp;におきかえれば?
0366デフォルトの名無しさん
2007/01/01(月) 21:31:270367デフォルトの名無しさん
2007/01/01(月) 21:32:220368デフォルトの名無しさん
2007/01/01(月) 21:37:320369デフォルトの名無しさん
2007/01/01(月) 21:40:31&
0370363
2007/01/01(月) 21:44:30ありがとうございます。
早速やってみたところ、&amp;は思い通りになりました。
しかし、他の実体参照文字(&quot;等)では、
&amp;quote;という風になってしまいますorz
0371デフォルトの名無しさん
2007/01/01(月) 21:44:46&を&amp;に置き換える
}
0372363
2007/01/01(月) 21:48:12&amp;quot;でも表示上は一緒でしたね。
"
どうも皆様ありがとうございました!
0373デフォルトの名無しさん
2007/01/01(月) 23:45:15そもそも & と & が混在していると
言う設計がおかしいのではないの?
0374デフォルトの名無しさん
2007/01/03(水) 13:35:53(つまり同じ文字列を出力する)
ということをしたいのですが、マッチした文字列をどう表現すればいいのかわかりません。
ereg_replace(".*", ".*", $str);
というようなことをしたいのですが、
第2パラメータをどう書けばいいのかわかりません。
上の例だと、そのまま.*という文字列が出力されてしまいます。
どなたかお助けください。
0375デフォルトの名無しさん
2007/01/03(水) 14:06:18動くかはしらん
0376デフォルトの名無しさん
2007/01/03(水) 14:21:13見事できました!
実は置き換え対象で\\1を指定したのに置き換えられなくて、
悩んでいたのですが、()で囲む必要があったんですね。
勉強になりました。どうもありがとうございました。
0377デフォルトの名無しさん
2007/01/10(水) 11:49:44C言語から使う場合 regex.h とどっちが早いの?
regex.h 遅いってイメージがあるんだけど・・・
0378377
2007/01/10(水) 13:17:480379デフォルトの名無しさん
2007/01/10(水) 21:12:030380デフォルトの名無しさん
2007/01/11(木) 07:42:12訳あってOR、ANDを正規表現で行っています
SELECT * FROM TEST WHERE
REGEXP_LIKE(text,'(あいう)|(ABC)|(xyz)')
上のSQLであいうまたはABCまたはxyzというOR検索は可能ですが
AND検索の正規表現がどうしてもできません。
知恵をかしてください。
0381デフォルトの名無しさん
2007/01/13(土) 16:08:13$template_src = preg_replace("/\\\[/","[",$template_src);
上のように、データ内に存在する\[を、ただの[へ置換したいのですが、
Compilation failed: missing terminating ] for character class at offset 3
という警告が出てしまいます。
自分では、\\で\として扱われているのかが怪しいと感じているのですが・・
これはどのようにすれば解決できるのでしょうか?
ご教授下さいませ。
0382デフォルトの名無しさん
2007/01/13(土) 16:10:560383381
2007/01/13(土) 16:23:51$hoge = '\[hoge\]';
$hoge = preg_replace('/\[/',"[",$hoge);
echo $hoge;
\[hoge\]が出力されてしまいます。
シングルクオートで囲んでも、\[はただの[として認識されているようです。
または、私何か間違った認識をしているのでしょうか・・?
0384デフォルトの名無しさん
2007/01/13(土) 16:33:41preg_replace('/\x2F\[/', '[', $hoge);
0385381
2007/01/13(土) 16:34:07笑ってください。
ありがとうございました。
0386デフォルトの名無しさん
2007/01/14(日) 01:09:060387デフォルトの名無しさん
2007/01/14(日) 05:15:510388386
2007/01/14(日) 14:41:08/\[([a-zA-Z]+)\]/ と /\[\/$1\]/ に挟まれていて、尚且つ /<br \/>/ と /\[\/?[a-zA-Z]+\]/ を含まないパターン、などです。
/\[([a-zA-Z]+)\](?:(?!<br \/>)(?!\[\/?[a-zA-Z]+\]).)*\[\/$1\]/
かと思ったのですが、違うようなのです。
0389デフォルトの名無しさん
2007/01/16(火) 13:07:410391デフォルトの名無しさん
2007/01/19(金) 13:40:05http://lab.moyo.biz/tools/regexp/index.jsp
0392デフォルトの名無しさん
2007/01/23(火) 11:17:31を参考に全角文字列に一致する正規表現を作っているのですが、さらに
・文字列の中間に全角スペースが1つ入っている。
・全体の文字数が20文字以内であること。
を条件に加えたいと思っていますがどのように記述したらいいでしょうか?
(マッチする例)
山田 太郎
ジョージ ブッシュ
(マッチしない例)
ウィリアム J クリントン ←スペースが2つ
山田太郎 ←スペース無し
山田太郎 ←先頭にスペース
あいうえおかきくけこ さしすせそなにぬねの ←20文字超
0393デフォルトの名無しさん
2007/01/23(火) 11:18:300394デフォルトの名無しさん
2007/01/23(火) 12:40:12正規表現でググレカス
0395デフォルトの名無しさん
2007/01/23(火) 13:33:090396デフォルトの名無しさん
2007/01/23(火) 16:08:09こんなセンスの無い表現を勝手に正規あつかいするな!
0397デフォルトの名無しさん
2007/01/23(火) 16:10:270398デフォルトの名無しさん
2007/01/23(火) 17:24:02直訳だからな。
0399デフォルトの名無しさん
2007/01/27(土) 00:48:54boostのバグ?
スレでの指摘により、boostの動作が怪しいという指摘がありました。
boost1.33および1.33.1で/\1/を使用した場合に落ちることを確認しました。
0400デフォルトの名無しさん
2007/01/27(土) 01:18:31正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/
0401デフォルトの名無しさん
2007/01/27(土) 12:50:50abc=
def=
ghi=
…
を
abc=abc
def=def
ghi=ghi
…
とするにはどういった正規表現で置換すればいいのでしょうか?
0402デフォルトの名無しさん
2007/01/27(土) 13:01:45(.+?)= → \1=\1
でいいんじゃね?
0403デフォルトの名無しさん
2007/01/27(土) 13:20:09できました!
ありがとうございます
0404デフォルトの名無しさん
2007/01/28(日) 11:19:300405デフォルトの名無しさん
2007/01/28(日) 11:38:51perlかsedが手ごろ。Windowsでも入手できるよ。
0406デフォルトの名無しさん
2007/01/28(日) 11:57:42正規表現って環境によって色々種類があるみたいで、
どれを勉強すればいいかわからない・・・。
一番スタンダートとされてるものは、grepなんですか?
0407デフォルトの名無しさん
2007/01/28(日) 12:11:580408デフォルトの名無しさん
2007/01/28(日) 13:15:180409デフォルトの名無しさん
2007/01/28(日) 13:32:17世間じゃPerl式が主流でもう正規表現の範疇から外れまくってる。
0410デフォルトの名無しさん
2007/01/28(日) 15:08:290411デフォルトの名無しさん
2007/01/28(日) 16:14:22lexやegrepと動き違うし、エンジンごとの挙動もぴったり合わなくなるし
使ってて感覚的に不正確なんだが(それが正しくても人間の感覚とズレるから)。
0412デフォルトの名無しさん
2007/01/28(日) 16:42:03俺的に、かなりの場面で、egrep程度の能力+プログラムコードの方がわかりやすい。
もちろんそうでない場面も多少はあるだろうが、あれだけ拡張する必要はなかったろう。
0413デフォルトの名無しさん
2007/01/28(日) 20:25:42最短一致の?とか、(?…)系のとこだけかな?
0414デフォルトの名無しさん
2007/01/28(日) 21:16:46perlは適当なところで中断して結果を返す仕様。
perlは深さ優先探索で枝刈りって制約をうけるから、
プログラム的な設計の自由度が全然なくてDFAとか使えない。
0415デフォルトの名無しさん
2007/01/29(月) 00:04:20perl式は世のデファクトだからなぁ
正しいとか正しくないとか関係ない
0416デフォルトの名無しさん
2007/01/29(月) 00:42:55んと、世間でよくいう「PPerl 5互換」というのはものぐさマッチ(最短マッチ)などの
表記上の拡張を受け付けるかどうかという観点でいってるんじゃないかな。
枝刈りだのなんだのまで考えて「互換仕様」にしているdeveloperはいないんじゃかろうか?
もちろん、理屈の上でperlと同じようにしないと実装できないというのは
おいといてね。
斜め読みなんで勘違いしているかもしれないけど、perl 6の rule だと
DFAで解釈できるところはDFA作ってマッチングを行うとかあったような。
まあもはやアレは「正規表現」じゃないが。
0417デフォルトの名無しさん
2007/01/29(月) 01:34:350418デフォルトの名無しさん
2007/01/29(月) 02:06:01得意げな顔をして髷を動かしている。こんな兄の血を引く自分が憎い」
妹「卑猥にすぎる。日本はどうなってしまうのか」
0419デフォルトの名無しさん
2007/01/29(月) 02:26:21最短一致てのが使えるってーことを知ったとき
「こりゃ便利だべ!」と思ったべさ
0420デフォルトの名無しさん
2007/01/29(月) 15:21:230421デフォルトの名無しさん
2007/01/29(月) 19:31:06兄の血を引く妹っておかしくね?
0422デフォルトの名無しさん
2007/01/30(火) 02:33:540423デフォルトの名無しさん
2007/01/30(火) 02:39:51http://ex20.2ch.net/test/read.cgi/gline/1162165418/758-759
0424デフォルトの名無しさん
2007/01/30(火) 02:48:030425デフォルトの名無しさん
2007/02/02(金) 18:00:49/\/ads?[./]/
/\.ads?\//
を上手く組み合わせられませんか?
/[,/]ads?[./]/
だと \.ads?\. もマッチしてしまうので、
これを除外したいのですが……。
0426デフォルトの名無しさん
2007/02/02(金) 21:02:570427デフォルトの名無しさん
2007/02/07(水) 14:01:14こちらで紹介している”例外弐 : 直前にマッチした部分を後で使う方法”
というのは普通のエディタでは使えませんか?
0428デフォルトの名無しさん
2007/02/07(水) 15:10:360429デフォルトの名無しさん
2007/02/07(水) 15:16:35自分が今使用しているのはサクラエディタです。
0430デフォルトの名無しさん
2007/02/07(水) 15:31:230431デフォルトの名無しさん
2007/02/08(木) 03:18:39分かりません(行頭からというのは出来るようになりました)
kome!kame!
の最後からkを探してそこから削除して kome! だけを残したいです
よろしくお願いいたします
0432kome!kame!
2007/02/08(木) 06:21:480433デフォルトの名無しさん
2007/02/08(木) 07:22:240434デフォルトの名無しさん
2007/02/08(木) 11:17:160435デフォルトの名無しさん
2007/02/08(木) 18:45:14例えば、
-----------------
{
hoge
}
{
}
-----------------------
の場合、
-----------------------
{
hoge
}
{
}
-----------------------
にしたいと考えています。
phpのpreg_replaceを利用するつもりです。
おながいします orz
0436デフォルトの名無しさん
2007/02/09(金) 10:04:17ラテン文字のみのトラックバックを禁止するものがあるのですが、
それと同じ正規表現をPHPに使いたいと思い、
ソースを見たのですが、Perlもわからずちんぷんかんぷんです。
とりあえずそれらしきもの(^[\x00-\xff]+$)を見つけたのですが、
これをそのままPHPでやってみたところ、日本語が混じってるのにも関わらず、
マッチしてしまったようです。
PHPではどうかけばいいのでしょうか?どなたかアドバイスお願いします。
0437デフォルトの名無しさん
2007/02/09(金) 15:01:40以下にあるjavaの正規表現構文に従って
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html
正規表現でメールアドレスを取って行きたいです。
以下の様な一行にあるメールアドレスを"<"や">"を判定材料として使わずに
取り出す事は可能でしょうか?XYZは任意の文字列です。
To: =?ISO-2022-JP?B?GyRCSRsoQg==?= <[email protected]>, =?ISO-2022-JP?B?GyRCRsoQg==?= <[email protected]>
0438デフォルトの名無しさん
2007/02/10(土) 14:58:29\xffじゃなくて\x7fが正解
0439デフォルトの名無しさん
2007/02/10(土) 22:02:19#A,B,C,D
HOGE,HOGE,
aiueo,kakikukeko
#E,F,G
....
というようなデータがあったとして、
#で始まる行だけ「,」を「&」に置換するのは正規表現だけでできるでしょうか?
PHPのpreg_replaceを使った置換ライブラリが既にあって、
それを通す時に置換しないといけない状況なので困っています…。
↓こういう出力になって欲しいのです。
A,B,CDE,F
#A&B&C&D
HOGE,HOGE,
aiueo,kakikukeko
#E&F&G
....
0440乞食
2007/02/10(土) 23:09:20ClipsedをTeraPadに追加したのですが、ClipsedのGUIの日本語が
文字化けして読めません。Clipsedのメイン画面と複数検索補助画面の
画像ファイルをどこかにアップして頂けないでしょうか?
よろしくお願いします。(ペコ
0441デフォルトの名無しさん
2007/02/11(日) 00:01:31どこを正規表現?
0442デフォルトの名無しさん
2007/02/11(日) 04:59:55行頭が#のときだけ置換してから呼ぶというパターンでなんか不具合があるの?
if (preg_match(行頭の#)) {
plage_replace ほげほげ ← ,を&に置き換え
}
ライブラリ呼び出し
つーぱたーんでさ。
0443デフォルトの名無しさん
2007/02/11(日) 06:24:53ありがとうございます。PHPのコードが入れられたら一発なんですよね。
でも、設定ファイルに相当するものしか変更する権限がないので、
プログラム部分が一切変更できません。なので、正規表現のみで実現できないか悩んでいます。
しかも変更できる部分が
preg_replace('/スラッシュの内側と/', '置換後', ...);
だけなので、パターンに/eとか/mを指定してすることもできず、例えば
preg_replace('/^L.*$/me', "str_replace(' ', '', '$1')" ...);
となるようにすることもできません。
ウワーン(T_T)
0444デフォルトの名無しさん
2007/02/11(日) 20:11:19phpにバージョンによっては可能
0445デフォルトの名無しさん
2007/02/11(日) 20:24:58うちはこれで動作したみたいだけど
0446デフォルトの名無しさん
2007/02/11(日) 20:44:01>>443の通り、プログラムが書けるわけではないので
正規表現のみでできないか探しています。
0447442
2007/02/11(日) 23:59:26そーゆー制限事項は省略せんでくれ
正規表現にこだわって問題を難しくしている人がままいるので気になるのだよw
でだ、
<?php
$str0 = "#a,b,c,d";
$str1 = "e,f,g,h";
$pat = "/(?=(?:#|(?<=.)\G))([^,]*),/";
echo preg_replace($pat, "$1&", $str0), "\n";
echo preg_replace($pat, "$1&", $str1), "\n";
結果
#a&b&c&d
e,f,g,h
こんな感じになったがこれでよいかや?
0448デフォルトの名無しさん
2007/02/12(月) 02:09:51ほとんど>>447のパクりだけど
$str = 'A,B,CDE,F
#A,B,C,D
HOGE,HOGE,
aiueo,kakikukeko
#E,F,G';
echo preg_replace("/(?=(?:#|(?<=.)\G))([^,\r\n]*),/", "$1&", $str);
0449デフォルトの名無しさん
2007/02/12(月) 17:49:40既存のライブラリを使わないといけない制限はかなりツライですね…。
>>448の方法で動きました!
内部的に行単位じゃありませんでした。
感謝の気持でいっぱいです。
ありがとうございます。
うをースゲー!
0450デフォルトの名無しさん
2007/02/12(月) 19:51:34preg_match("/To: <(.+?)>\s/", $header, $result);
・・・と書いています。これでvodafoneのV602SHから送信されたメールでは上手くいきました。
これはこれでメールの仕様通りだと思いますが、
もしも「To」が「to」や「TO」だったら? もしも「To:」の後ろのスペースが1つじゃなかったら??
もしも「< >」が使われていなかったら??? etc.
そう考えていくと正規表現を何パターンも用意しなくてはならず、漏れが怖いです。
こういうとき、皆さんはどう対処していますか? この場合の汎用的な正規表現ってあるのでしょうか?
なお、検索したらモード修飾子というものがあるのを知り、
preg_match("/To:\s?<?(.+?)>?\s/i", $header, $result);
にしてみたら、かえって悪くなりましたorz
今までマッチしてたはずのものにもマッチしなくなりました・・・
0451デフォルトの名無しさん
2007/02/12(月) 20:35:090452デフォルトの名無しさん
2007/02/12(月) 22:56:020453デフォルトの名無しさん
2007/02/12(月) 23:22:01[]
0455450
2007/02/13(火) 11:22:48昨夜いろいろ試してみましたが、結局ダメでした・・・
どなたかお知恵をお貸しください・・・
0456デフォルトの名無しさん
2007/02/13(火) 11:33:32答えようかと思ったらすでに回答ついてるじゃないか
0457デフォルトの名無しさん
2007/02/13(火) 11:56:20分からないなら分からないと素直に認めないと。
0458デフォルトの名無しさん
2007/02/13(火) 12:20:450459デフォルトの名無しさん
2007/02/13(火) 14:34:42「自分は玄人ぶってるけど、実は自信が無いただのバカです」と気づけ。
0460デフォルトの名無しさん
2007/02/13(火) 20:01:260461デフォルトの名無しさん
2007/02/13(火) 20:52:22「メールヘッダからメールアドレスを抜き出したい」
という要件を「厳密に」やろうとすると、実は極めて難しいです。
…いくつかの改行
…いくつかの文字列
<div>bbbbb</div>
この様に複数行にわたる文字列<p>〜</div>の一致を返すことのできる正規表現はありますでしょうか、
またそれは可能でしょうか、どうぞよろしくお願いします。
0463デフォルトの名無しさん
2007/02/13(火) 21:14:42こちらこそよろしくお願いします。
では、その方法を伝授してはいただけないでしょうか。
0465デフォルトの名無しさん
2007/02/14(水) 00:50:03「メールアドレス」を厳密にやるのは難しいけど、
とりあえずメアドのマッチは適当でいいとして、
ヘッダの中から「To:」で始まるメアド「らしき」文字列を抜き出すのは
簡単なのでは??
0466デフォルトの名無しさん
2007/02/14(水) 00:52:45簡単だと思うなら正規表現挙げてやれよ
0467デフォルトの名無しさん
2007/02/14(水) 01:17:030468デフォルトの名無しさん
2007/02/14(水) 02:13:39教えない
0469デフォルトの名無しさん
2007/02/14(水) 09:41:44http://www.din.or.jp/~ohzaki/perl.htm#Mail
長すぎてわけわからん
0470デフォルトの名無しさん
2007/02/14(水) 16:53:03いま話題になってるのは、「メアドそのもの」のマッチじゃなくて、
メールのヘッダから「To:の行」を取り出す話。
0471デフォルトの名無しさん
2007/02/16(金) 00:57:451999-12-23日のような形式をした日付けかをチェックするために
function checkDate(str){
if(! str.match(/^(\d{4})\-(\d{2})\-(\d{2})$/)) return false;
var sYear = parseInt(RegExp.$1);
var sMonth = parseInt(RegExp.$2);
var sDay = parseInt(RegExp.$3);
if(sYear<1950) return false;
if(sYear>2050) return false;
if(sMonth<1) return false;
if(sMonth>12) return false;
if(sDay<1) return false;
if(sDay>31) return false;
return true;}
function checkSubmit(obj){
var empty_flag_title = obj.title.value == "";
var empty_flag_from = obj.date_from.value == "";
var empty_flag_to = obj.date_to.value == "";
if(empty_flag_title && empty_flag_from && empty_flag_to){return false;}
if(!empty_flag_from){
var str = obj.date_from.value;
if(!checkDate(str)){return false;}}
if(!empty_flag_to){
var str = obj.date_to.value;
if(!checkDate(str)){return false;}}
return true;}
とこんな感じでチェックしているのですが
2007-01-01は通るのに2007-01-08もしくは09は通りません.
自分にはまったく通らない原因がわかりませんでしたので,どなたか何処が間違っているか教えてください.
よろしくお願いします.
0472デフォルトの名無しさん
2007/02/16(金) 01:14:51parseInt("08", 8) == 0
parseInt("08", 10) == 8
0474デフォルトの名無しさん
2007/02/16(金) 22:33:22正規表現でどのように現すか分かりません。。
.*(?!gif)
でわ、****.gifもマッチしてしまいました。。 どのようにすればよいかお教えくださいです!
0475デフォルトの名無しさん
2007/02/16(金) 23:13:24****.gifにマッチしたら除外する方がよくないか?
0476デフォルトの名無しさん
2007/02/17(土) 11:30:51http://www.pahoo.org/e-soul/webtech/php05/
0477デフォルトの名無しさん
2007/02/22(木) 11:29:01こんなの作ったけどうまくうごかねぇ・・・
動作目標は
先頭から+-が1つまたは無し
0から9の文字が1以上10以下連続し
その後でピリオドがあってもなくてもよい
ピリオドがない場合そっから後ろの文字が何にもなければOK
ピリオドがあった場合0から9の文字が1つ以上3以下連続してある事
^[-+]?[0-9]\{1,10\}[.][0-9]\{1,3\}
これで動くかなと思ったけど今一歩・・
実際どこが悪いかといわれるとピリオド判定が悪い気がするんだが・・・
もし気づいた人いたら指摘くださいませんか?
0478デフォルトの名無しさん
2007/02/22(木) 11:55:58dotを含めた小数点以下があるかないかだから、
(\.[0-9]\*{1,3\})?
かな。
0479デフォルトの名無しさん
2007/02/22(木) 12:07:51トンクス!
あ〜グループにしてそれがあるか無いかの判断と考えればいいのか
やってみます!ありがとでした
0480デフォルトの名無しさん
2007/02/23(金) 15:26:350481デフォルトの名無しさん
2007/02/26(月) 00:45:14テーブルタグが2重(3重)になっているものがありまして
<table>
<table>なにかKeyになる文字</table>
</table>
の時に内側のテーブルのみを消去したく
$html = preg_replace('/<table>.*?Key.*?<\/table>/is', '', $html);
としてみたのですが、外側の開始タグ以降から消去してしまいます
正規表現自体知ったばかりなので初歩的な質問かも知れませんが
ご教授いただけるとうれしいです
0482デフォルトの名無しさん
2007/02/26(月) 01:46:25○ご教示
0483デフォルトの名無しさん
2007/02/26(月) 01:52:47そりゃ正規表現で処理すべき問題じゃない。
知ったばかりだというならなおのことその辺に注意すべき。
ネストを二重に限定していいなら手でネストを書いとけば?
あとPHPのpreg_だと再帰的な構造も書けた気がするけど
書き下すの面倒なので俺はパス。
0484デフォルトの名無しさん
2007/02/27(火) 03:48:27Perlしか知らないけど
/<table(?!<table)(.(?!<table))*?<\/table>/
これで行けない?
0485デフォルトの名無しさん
2007/02/27(火) 03:49:17/<table(.(?!<table))*?<\/table>/
だ
0486デフォルトの名無しさん
2007/02/27(火) 03:51:450487デフォルトの名無しさん
2007/02/27(火) 06:10:09例えばカンマで分解したいのですが、括弧やクォーテーションで括られたカンマは
対象外にしたいのです。
例1)aaa,bbb,ccc
aaa
bbb
ccc
例2)aaa(a1, a2),bbb(aaa(a1, a2)),ccc("9,999")
aaa(a1, a2)
bbb(aaa(a1, a2))
ccc("9,999")
お助けください。
0488デフォルトの名無しさん
2007/02/27(火) 11:10:02Key の処理が抜けてるような。
0489デフォルトの名無しさん
2007/02/27(火) 19:16:29$line=preg_match('/<input type="hidden" name="MT" value="(.*?)">/i',$line,$reg);
やはり、間違ってますかね?
0490デフォルトの名無しさん
2007/02/27(火) 19:18:290491デフォルトの名無しさん
2007/02/27(火) 19:23:26レスありがとうございます。入ってないんですよね。
具体的には
<input type="hidden" name="MAP" value="E139.44.55.110N35.39.19.420">
<input type="hidden" name="MT" value="東京都港区芝公園4-2-8">
という感じが、$lineに入っていくのですが。
0492デフォルトの名無しさん
2007/02/27(火) 19:30:330493489
2007/02/27(火) 19:34:30print_r($reg);
とやっても何も入っていないのです orz
0494デフォルトの名無しさん
2007/02/27(火) 21:02:48$$自由な文字 {{自由な文字}}
例)$$foo {{boo boo boo}}
を抜き出して、自前でセレクタと要素を表現、みたいなことをやろうと色々やってみています。
現在は下のような感じなのですが、
myRegExp.Pattern = "\$\$([^{{]*)\{\{([^}}]*)\}\}"
例2)$$foo {{ boo boo } boo }}
{{で開け、}}で閉じているつもりなのに、例2のように}を単発入れると
無視してしまいます。
どこが悪いのでしょう、、どなたか教えてください・・
0495デフォルトの名無しさん
2007/02/27(火) 22:15:40は
[^{]
と同じだぞ?
0496494
2007/02/27(火) 22:23:31ありがとうございます。今試して知りました・・。
長々と相談をしてしまいましたが、質問を絞れました。ご指摘いただいたように
「{{」以外の任意の文字、を表現したい、というのが相談の肝です。
([^{{2}]←これでいくように思えたのですが、駄目ですね・・。)
ご教授いただければ幸いです。。
0497デフォルトの名無しさん
2007/02/27(火) 22:32:220498494
2007/02/27(火) 22:44:35失礼しました。
0499デフォルトの名無しさん
2007/02/28(水) 07:17:29自民党に訊いた方がいいですか?
0500デフォルトの名無しさん
2007/02/28(水) 14:36:35このリンクタグからhogehogeを抜き出すには、どのように書けばいいのでしょうか?
PHPなのですが、以下のように書いて取得できません。
preg_match("/(\bhref\s*=\s*[\"']?)(\/rap.php[^\s\"'>]*)">(.*)<\/a>/i",$line,$reg);
最後のキャプチャ部分が取得できないのですが。。。
0501デフォルトの名無しさん
2007/02/28(水) 16:33:32([^<]+)
0502デフォルトの名無しさん
2007/02/28(水) 21:13:40それではマッチしないだろ…常識的に考えて…。
[^\s\"'>]* ←これは感心した。
/\bhref\s*=\s*([\"']?)\/rap.php?([^\s\"'\/>]*.*?)\1\s*>(.*?)<\/a>/
こんな感じでどうだ?
0503デフォルトの名無しさん
2007/02/28(水) 21:14:58rap.php? → rap\.php
0504デフォルトの名無しさん
2007/03/02(金) 00:13:42http://www.din.or.jp/~ohzaki/regex.htm に
> ある文字列を含まないものにマッチする正規表現
> (?:(?!foo).)*
とあるのですが、これは正しいのでしょうか?
http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html を見ると、
(?:(?<!foo).)*
のような気がするのですが、いかがでしょうか?
どうぞよろしくお願いいたします。
0505デフォルトの名無しさん
2007/03/02(金) 00:27:59正しい
(?!foo)は現在の注目地点から見て、その後にfooが続いていない、という条件
(?!foo).で、それ自身がfooという文字列の1文字目にならない1文字にマッチ。
(?:(?!foo).)*でその繰り返し。
(?:(?<!foo).)*
だとある1文字の前にfooという文字列が来ない、という繰り返し。
最後にfooがあったらマッチしてしまう。
(?:.(?<!foo))*
これなら得られる結果は違うが条件を満たす。
0506デフォルトの名無しさん
2007/03/02(金) 09:52:18C++ファイル(.cpp)のメソッドの実装部分だけをくり抜こうとしています。
void Test::Test(void)
{
// メソッド実装
}
上記の { から } までを抽出しようとしているのですが
"^\{.*?^\}"ではマッチしません。
どうすれば { から } を抽出できるでしょうか?
0507デフォルトの名無しさん
2007/03/02(金) 10:39:160508デフォルトの名無しさん
2007/03/02(金) 10:49:36"^\{[\n\s\w\\\*\+\.\?\{\}\(\)\[\]\^\$\-\|\&\""=:;\/,!#\<\>\+%']*?^\}"
でヒットしました。
もっと短くなればいいのですが。
あと、半角カタカナのコメントがあるとだめですが。
0509デフォルトの名無しさん
2007/03/02(金) 13:25:53Regex r=new Regex(@"(?<=\n)\{(.*?)(?<=\n)\}",RegexOptions.Singleline);
でいいんじゃないですか?
0510デフォルトの名無しさん
2007/03/03(土) 00:59:09「$textにいくつかの文字列候補、例えばApp,Bbq,Ntk,Sunが2個以上(非重複)含まれる時」
っていう条件はどう書けばいいのでしょうか?
1つだと $text =~ /(App|Bbq|Ntk|Sun)/だけど・・・
0511デフォルトの名無しさん
2007/03/03(土) 01:33:42/(App|Bbq|Ntk|Sun).*\1/
でいけた気がする。
0512デフォルトの名無しさん
2007/03/03(土) 01:42:340513デフォルトの名無しさん
2007/03/03(土) 03:27:26とりあえず、その過剰で余計なエスケープをやめれば短くなるでそw
0514デフォルトの名無しさん
2007/03/03(土) 04:23:30なんか条件の文があいまいだな。
そのあげられた単語の中から二種類以上見つかったら当たりってこと?
Perlスレの811にあるようにリストコンテキストで受けて、その中身を
チェックした方がいいと思うよ。正規表現だけでやってやれなくはないと思うけど
多分効率が悪い。対象の単語の数が増えるならなおさら。
0515デフォルトの名無しさん
2007/03/03(土) 06:15:55> そのあげられた単語の中から二種類以上見つかったら当たりってこと?
そうです。例えばマッチする$textの例としてはMonSunFayAppなどです。マッチングしない例としてはAppMonAppKeyなど。
>リストコンテキストで受けて
う・・とりあえずレス811を見たんですが
(scalar @{[$text =~ /App|Bbq|Ntk|Sun/g]} >= 2)
これでいけるんでしょうか??
0516デフォルトの名無しさん
2007/03/03(土) 06:53:13正規表現にこだわらないなら(スレ違いだけど):
(grep { $text =~/$_/ } qw(AA BB CC)) >= 2
0517デフォルトの名無しさん
2007/03/03(土) 08:09:020518デフォルトの名無しさん
2007/03/03(土) 16:39:58ご教授でも間違いではないよ
0519デフォルトの名無しさん
2007/03/03(土) 17:08:080520デフォルトの名無しさん
2007/03/03(土) 17:08:110521デフォルトの名無しさん
2007/03/03(土) 17:32:050522デフォルトの名無しさん
2007/03/03(土) 17:39:530523デフォルトの名無しさん
2007/03/03(土) 21:04:50お前さん移動するなら元のスレに一言くらい書いといてくれよ。
0524デフォルトの名無しさん
2007/03/04(日) 16:15:45こういう文字列があった場合、
"<"から">"までを検索したいんですが、
一回目は<def>
二回目は<jkl>
に、ヒットさせたいと思ってます。
"<.*>"で、検索すると、
"<def>ghi<jkl>"という具合にマッチしてしまうんですが、
何かいい方法はないでしょうか?
0525デフォルトの名無しさん
2007/03/04(日) 16:33:560527デフォルトの名無しさん
2007/03/06(火) 04:17:08例えば、hogeboo を (HoGe|Fuga) ってパターンで一致させる場合、$1 は hoge になります。
得たいのは HoGe です。
0528504
2007/03/06(火) 06:17:12せっかくすぐにレスをいただいたのにお礼が遅くなりまして、すみません。
なるほど。「現在の注目地点」という考え方をするのですね。
なんとなく、前とか後とかとしかとらえられていなかったので、勉強になりました。
よくわかりました。どうもありがとうございました。
0529デフォルトの名無しさん
2007/03/06(火) 13:49:17一度HoGeに置き換えてもう一度マッチさせるとか
0530デフォルトの名無しさん
2007/03/06(火) 13:54:24ワイルドカードや量指定子などがついていないなら
正規表現の文字列表現をマッチさせて取り出した部分文字列で逆に検索すればいいんじゃね?
(?i:HoGe|Fuga) -> hogeboo -> hoge
?i:hoge -> (HoGe|Fuga) -> HoGe
0531デフォルトの名無しさん
2007/03/06(火) 15:23:05一般には理論的に不可能なのかな?
0532デフォルトの名無しさん
2007/03/06(火) 17:35:550533デフォルトの名無しさん
2007/03/07(水) 00:27:110534デフォルトの名無しさん
2007/03/07(水) 03:02:31コードの可読性を考えて、IgnoreCase の case でひっかけたい。
現在は小文字化や大文字化した後の文字列でひっかけてます。
その場合、case 条件の値が小文字化や大文字化済の文字列になって、
いまいち見た目美しくない。
たいした問題ではないのですが、気分的にいやなので。
case の一致条件が IgnoreCaes にできる処理系だといいんですが。
>>530
Hoge や Fuga など取り出す部分を対象文字列分用意して置き換えてしまえば
可能なのはわかりますが。
$1 風にエレガントにできないのかな〜と?
0535デフォルトの名無しさん
2007/03/07(水) 14:02:46その処理系を明らかにしてくれないことには答えようがないと思うんだ。
ここまでのお前さんのレスだけだと、処理系を作ろうとしているのか、
既存の処理系を使っているのかすらわからない。
0536デフォルトの名無しさん
2007/03/07(水) 14:22:200537デフォルトの名無しさん
2007/03/11(日) 20:42:15www.hoge.jp/huga/index.html
のような文字列を www.hoge.jp と /huga/index.html とに分割したいんですが
(要は1個めの"/"の前と"/"以後で分けたい)、この場合それぞれにマッチする
正規表現はどうなるでしょうか?
0538デフォルトの名無しさん
2007/03/11(日) 20:55:41[^/]*
後者:
.*
perl的。
0540デフォルトの名無しさん
2007/03/11(日) 21:21:000541デフォルトの名無しさん
2007/03/14(水) 01:11:050542デフォルトの名無しさん
2007/03/14(水) 11:05:09/ですぅ/i
0543デフォルトの名無しさん
2007/03/15(木) 13:32:22[ぁ-ん]とか期待してるんだろ!!そうだろ!!
0544デフォルトの名無しさん
2007/03/15(木) 14:38:29メールのヘッダのアドレスを解析するやつ
0545デフォルトの名無しさん
2007/03/16(金) 08:17:30^..^
0546デフォルトの名無しさん
2007/03/16(金) 22:51:06次のような感じでPerlでは想定した結果が出るんですが、
Pythonだと (?>pattern) が使えない関係でどうにもうまくいきません。( ++, *+, ?+ とかも使えません )
# yahooにのみリンクするサンプル
$html = q{
<p><a href="http://www.google.co.jp/">http://www.google.co.jp/</a></p>
<p>http://www.yahoo.co.jp/</p>
};
$html =~ s`(?<!\ssrc=")(?<!\shref=")(?>(?<![a-z09/])(h?ttp://[-_a-z0-9.~:/?#%@!$&'()*+,;=]+))(?!</a>)`$1 <a href="$1">[open]</a>`gi;
0547546
2007/03/17(土) 01:59:09一行でできればなおベストですが・・・
お邪魔しました。
0548デフォルトの名無しさん
2007/03/18(日) 03:28:430549デフォルトの名無しさん
2007/03/18(日) 11:31:48互換てどこまでの意味でいってる?
たいがいの表記なら使える程度なら互換性はある。
Perlしかないものがあるのと、
バグまで含めた動作でいえば互換性は
ないかもしれない。
0550デフォルトの名無しさん
2007/03/19(月) 10:36:190551デフォルトの名無しさん
2007/03/19(月) 11:56:150552デフォルトの名無しさん
2007/03/19(月) 15:57:530553デフォルトの名無しさん
2007/03/19(月) 16:42:330554デフォルトの名無しさん
2007/03/21(水) 09:32:13現在WIN32バイナリのみリリース、
まだシフトJISのみ入力可能。
使用方法:
標準入力から正規表現を入れると標準出力にdot言語のソースが出力される。
A>alamo < textfile | dot -Tjpg > out.jpg
トンプソンの構成法でなくεを消去した状態のNFA。
出力をファイルに落としてからUTF8に変換すれば漢字も出た。
http://capslockabcjp.kitunebi.com/alamo-a.zip
※動作条件としてhttp://www.graphviz.org/が必要
0555デフォルトの名無しさん
2007/03/27(火) 11:20:01<input type="text" name="test1" value="aaaa" size="20">
→<input type="text" name="" value="aaaa" size="20">
<input>を見つける事ならできるのですがname="test1"部分のみを取得する方法がわかりません。
お力を貸してください。
0556555
2007/03/27(火) 12:50:24<[^\/A-Za-z]*input[^>]*(text|checkbox|radio|hidden)[^>]*(name[ ]*=[ ]*[\"\'][0-9A-Za-z][^\"\']*[\"\'])[^>]*>
でサブパターンにマッチした文字列を置き換えるようにしました。
間違えてたらご指摘いただければと思います。
0557デフォルトの名無しさん
2007/03/27(火) 19:32:45シェルのuptimeコマンドの結果から:
7:25PM up (167) days, 2:03, 2 users, load averages: (1.74), (1.67), (1.30)
丸括弧( )で括った部分をマッチさせるために、次のように表現してみました。
/ up (.+) days?, .+ load average: (.+), (.+), (.+)/
もっとスマートな表現方法があればアドバイスをお願いします。
0558デフォルトの名無しさん
2007/03/27(火) 19:46:03とりあえず非欲張りな量指定子が使えるならそれ使った方がいいし、
. にしないで [0-9.] とかにしたほうがよさそう。
0559デフォルトの名無しさん
2007/03/27(火) 19:51:22後、uptimeって1day未満の場合の書式はどうなってんのか知らんがだいじょうぶなの?
0560デフォルトの名無しさん
2007/03/27(火) 20:01:19RedHat:
19:54:00 up 2:59, 4 users, load average: 1.00, 1.02, 1.02
FedoraCore:
19:55:03 up 50 days, 13:17, 3 users, load average: 0.00, 0.00, 0.00
Solaris:
7:58pm up 1 day(s), 1:01, 2 users, load average: 0.03, 0.01, 0.02
午後 8時01分 稼働 1 日間, 1:04, 3 ユーザー, 平均負荷率: 0.00, 0.00, 0.01
0561557
2007/03/28(水) 00:16:02/load average: ([0-9.]+), ([0-9.]+), ([0-9.]+)/
みなさん、ありがとうございました。
0562デフォルトの名無しさん
2007/03/28(水) 09:39:51sjisにて、
$tmp =~ s/?:\x0D\x0A|[\x0D\x0A])?$/,/;
というのは、
$tmpの(「CRの次にLFが続くもの」もしくは「CRまたはLF」)が0もしくは1個続いた後で行末に続くという箇所をカンマで置き換えるという解釈でよろしいでしょうか?
0563デフォルトの名無しさん
2007/03/28(水) 12:42:42左括弧が抜けているが、多分その通りだね。
元のソース作った香具師は、かなりの糞だな。
普通は次のように書く。
$tmp .= "," if chomp $tmp;
0564デフォルトの名無しさん
2007/03/28(水) 13:03:23ありがとうございました。
某所でこのコードの続きについて質問したのですが、有名処のソースのコピペだったようです。
解釈についてもそこに書かれてたので、一応リンクを貼っておきますね。
http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values
しかし、perl読みづらい…。
0565デフォルトの名無しさん
2007/03/28(水) 13:34:100566デフォルトの名無しさん
2007/03/28(水) 13:37:550567デフォルトの名無しさん
2007/04/10(火) 19:35:25複数の文字列に一致させたい場合、たとえば「ヨーグルト」「プルーン」を含むテキストに一致させたい場合は、
次のようにすればいいのでしょうか。
.*ヨーグルト.*プルーン
で検索。次に
.*プルーン.*ヨーグルト
自分で言うのも情けないですが、ずぶの素人なので相当あほなやり方でやってる気がします。
0568デフォルトの名無しさん
2007/04/10(火) 19:58:140569デフォルトの名無しさん
2007/04/10(火) 20:42:37orではなく、両方を含む文字列に一致させたいのですが。
0570デフォルトの名無しさん
2007/04/10(火) 21:23:130571デフォルトの名無しさん
2007/04/10(火) 21:48:02一文字なら
grep "^[^h]" target > destination
みたいな感じですが。
0572デフォルトの名無しさん
2007/04/10(火) 22:32:110574デフォルトの名無しさん
2007/04/13(金) 00:00:33マッチしたかどうかだけが知りたくてマッチした文字列そのものはどうでも良い場合、
最短マッチと最長マッチではどちらの方が高速に動作するのでしょうか?
ご存じの方が居られましたらご教示頂けますと幸いです。よろしくお願いします。
0575デフォルトの名無しさん
2007/04/13(金) 00:13:020576デフォルトの名無しさん
2007/04/13(金) 00:26:10プログラムの設計によっては最終的な処理を終えた時点で逆転している可能性もあるという事ですね。
参考になりました。どうもありがとうございました。
0577デフォルトの名無しさん
2007/04/13(金) 23:33:37こういう奴が、単純にひとつの文字列を最短マッチで検索するのに
すげー遅いプログラムとか書いたりするんだろうな。
0578デフォルトの名無しさん
2007/04/13(金) 23:49:30自分がそういうプログラムを書かないという保証はありませんが、
今回の話に限れば他人が書いたプログラムで使われている正規表現の
最短/最長マッチの使い方が妥当だったのかどうかを知りたかっただけですので
ご心配なく。
0579デフォルトの名無しさん
2007/04/13(金) 23:51:590580デフォルトの名無しさん
2007/04/14(土) 00:32:37まあ、「心配するな」って言ってるんだからいいか...。
0581デフォルトの名無しさん
2007/04/14(土) 10:56:200582デフォルトの名無しさん
2007/04/21(土) 03:00:42\~は「最後に置換された文字列」と解説されてたのですがこの場合置換自体していません。
0583デフォルトの名無しさん
2007/04/21(土) 04:32:48magic オプションの設定によって意味が違うみたいだけどその辺は?
それでも \? がわからんな。
0584デフォルトの名無しさん
2007/04/22(日) 02:18:41同じ文字が3文字以上続くようなパスワードを禁止したいのですが、このような正規表現は可能でしょうか?
0585デフォルトの名無しさん
2007/04/22(日) 02:47:13regexエンジンによってはできない。
正規表現に名前をつけて、あとから使い回せる構文があるならできる。
0586デフォルトの名無しさん
2007/04/22(日) 03:11:37そんなに難しいケースなんですか。
ちなみにPerlを使っています。Perlって正規表現に強いと聞いていましたけど・・・。
0587デフォルトの名無しさん
2007/04/22(日) 04:20:53本来の意味の「正規表現」からは思いっきり逸脱しているのよ > perl
んで、perlならこんな感じで検出できる。
while (<DATA>) {
print if /(.)\1{2}/;
}
__END__
fooxxxbar
xyxxydd
foobarbaz
0588デフォルトの名無しさん
2007/04/22(日) 08:40:40なんだまた前日知ったばかりの知識で薀蓄かよ
頭悪そう
0589デフォルトの名無しさん
2007/04/22(日) 08:42:59なんだまた前日知ったばかりの知識で薀蓄かよ
頭悪そう
0590デフォルトの名無しさん
2007/04/22(日) 12:51:130591デフォルトの名無しさん
2007/04/22(日) 16:37:57φ={1、3、5、7、9}とか例題出してるけど、
それって状態遷移図の上にある点の集まり。
パターン中のバックリファレンスは図面書けないから定義と違う。
なんつーんだろ、動作中に図面が完成するというもの。
0592デフォルトの名無しさん
2007/04/22(日) 17:01:55今更そんなものを持ち出すのも阿呆らしいけどな
0593・∀・)っ-○◎●
2007/04/22(日) 18:06:430594デフォルトの名無しさん
2007/04/22(日) 18:17:09ここはお前の日記帳じゃないゾ
0595・∀・)っ-○◎●
2007/04/22(日) 19:25:110596デフォルトの名無しさん
2007/04/22(日) 20:12:410597デフォルトの名無しさん
2007/04/23(月) 02:04:470598デフォルトの名無しさん
2007/04/23(月) 02:07:14ttp://www5b.biglobe.ne.jp/~yew/index.html
0599デフォルトの名無しさん
2007/04/23(月) 03:44:34abc@@aa@a@b123@@@@という文で@で区切りたい場合、
abc@@aa
a
b123@@@@
のように区切りたいのですが・・・
splist("@{1}",$str);では当然ながらだめでした。
0600599
2007/04/23(月) 07:15:58abc@@a
@b123@@@@
と周辺の文字も一緒に削ってしまうのでだめでした。
ああ、正規表現難しい・・・
0601デフォルトの名無しさん
2007/04/23(月) 07:25:52foreach(preg_split('/(@+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE) as $t) {
if($t == '@') arr[] = ''; else arr[count(arr) - 1] += $t;
}
0602デフォルトの名無しさん
2007/04/23(月) 07:57:160603599
2007/04/23(月) 08:35:53すいません、私の頭では理解できませんでした・・・コピペして使ってみたら
PHP Parse error: syntax error, unexpected '[' in [URL] ってでました
>>602
まさにやりたいことがそれみたいで、
$bufsplit = mb_split("(?<!@)@(?!@)", $buffer); と早速試してみたところ
PHP Warning: mb_split() [function.mb-split]: mbregex compile err: undefined (?...) sequence in [URL]
とでてしまいました。
PHP4だと使えないんですかね・・・orz
0604デフォルトの名無しさん
2007/04/23(月) 09:26:21$str = 'abc@@aa@a@b123@@@@';
var_dump(preg_split('/(?<!@)@(?!@)/', $str));
0605デフォルトの名無しさん
2007/04/24(火) 01:44:29PHP4 の mb_regex は鬼車になっていない。
ので戻り読みは使えない。
0606デフォルトの名無しさん
2007/04/25(水) 17:01:17どっかにないすか?
逆は簡単なんだけどなw
0607デフォルトの名無しさん
2007/04/26(木) 08:05:240608デフォルトの名無しさん
2007/05/02(水) 00:14:14うんたらこうたら・・・
HOGE_START
00 1 2 3 4 5
11 6 7 8 9 10
22 11 12 13 14 15
HOGE_END
うんたらこうたら・・・
-------------------------
上のHOGE_STARTとHOGE_ENDの間の
データの00と1,11と6,22と11の部分の値を取得したい場合、
どのように記述すればよいでしょうか?
ちなみにこのHOGE_STARTとHOGE_ENDの間の行数は変動します。
補足です。
ウェブプログラマー初めて2年近くたつんですが、
正規表現が糞レベルから一向に上達しません。
なんとか苦労して使えば誤動作の嵐です。orz
習うより慣れろなんでしょうか?
0609608
2007/05/02(水) 00:25:01特定のデータファイルから
規則性のある部分の一部データを抜き出したい場合、
正規表現を使うものなんでしょうか?
まさに608のようなケースなんですが、
このパターンの正規表現の苦手っぷりがひどいです。
0610デフォルトの名無しさん
2007/05/02(水) 00:42:17PCREな。
/(?<=HOGE_START\x0A|HOGE_START\x0D|HOGE_START\x0D\x0A)(.*?)(?=HOGE_END(?:\x0A|\x0D|\x0D\x0A))/s
にマッチする全体
PerlとかPHP使うならもっと単純な正規表現で十分だが。
0611デフォルトの名無しさん
2007/05/02(水) 02:34:21正規表現、つかawkあたりの出番じゃね?
awk '/HOGE_START/,HOGE_END/ {
最初と最後の行が入っちゃうけどお好みでデータを処理
}'
CGIとかでという話なら、Perlもおんなじことできるよ。
0612デフォルトの名無しさん
2007/05/02(水) 03:20:52まず行に分解して
固定長ならunpack関数、可変長ならセパレータの正規表現作って配列に分解して
何番目か数えればいいんじゃない?
0613デフォルトの名無しさん
2007/05/04(金) 17:28:35AAAA|BBBB|CCCC
という文字列を分解して
AAAA
BBBB
CCCC
という配列を正規表現で返したいのですが上手くいきません、
使った正規表現「(.*)[|]?(.*)[|]?(.*)」
いい方法ありませんか?
0614デフォルトの名無しさん
2007/05/04(金) 18:06:590615・∀・)っ-○◎●
2007/05/04(金) 19:53:380616デフォルトの名無しさん
2007/05/04(金) 22:25:31AAAA|BBBB|CCCC
の場合
AAAA
BBBB
CCCC
を取得できたのですが
AAAA|BBBBになった場合
nullになってしまいます。・゚・(ノ∀`)・゚・。
「(.*)[|]?(.*)[|]?(.*)」
でも同じです。
>>614
正規表現を使用してやりたかったので・・・
0617デフォルトの名無しさん
2007/05/04(金) 22:41:360618・∀・)っ-○◎●
2007/05/04(金) 22:56:06最短マッチだと文字列に全くマッチしないって理屈わかる?
0619・∀・)っ-○◎●
2007/05/04(金) 23:03:13で奇数番目を取る。
でも素直にsplit使えよ
0620デフォルトの名無しさん
2007/05/04(金) 23:13:21でも素直にsplit使えよ
0621デフォルトの名無しさん
2007/05/04(金) 23:33:18.*(?=\||$)
でも素直にsplit使えよ
0622デフォルトの名無しさん
2007/05/05(土) 00:22:20素直にsplit使うことにします。
0623デフォルトの名無しさん
2007/05/07(月) 01:24:53PHPなんですが、このようなリストがある場合にカンマ区切りで
値を取得するにはどうやれば良いのでしょうか。
但しダブルクォートの中の文字は分割したくないです。
0624デフォルトの名無しさん
2007/05/07(月) 02:48:30csvのデータだとみなして分割してやればいいんじゃね?
csvのハンドリングのサンプルは転がってるでしょ。
0625デフォルトの名無しさん
2007/05/07(月) 20:02:16それはリストが悪い。セパレータをタブとかにすべきだな
0626デフォルトの名無しさん
2007/05/07(月) 20:37:180627デフォルトの名無しさん
2007/05/07(月) 20:55:520628デフォルトの名無しさん
2007/05/07(月) 21:38:16しねよ
0630デフォルトの名無しさん
2007/05/08(火) 01:41:210631デフォルトの名無しさん
2007/05/08(火) 18:58:54*;.*
とすると改行まで入ってしまう。どうすれば。
0632デフォルトの名無しさん
2007/05/08(火) 19:00:140633デフォルトの名無しさん
2007/05/08(火) 19:21:09挙動を変更するオプションがあるかもしれんからマニュアル嫁
0634デフォルトの名無しさん
2007/05/10(木) 22:57:23「数列のみ もしくは 数字-数字-数字」
と言うのはどう書くですか?
0635デフォルトの名無しさん
2007/05/10(木) 23:09:090636デフォルトの名無しさん
2007/05/10(木) 23:17:390637デフォルトの名無しさん
2007/05/10(木) 23:34:130638デフォルトの名無しさん
2007/05/11(金) 00:27:45^[ぁ-ん]+$
^[ァ-ヶ]+$
はどう書きますか?
0639デフォルトの名無しさん
2007/05/11(金) 01:46:215.8以上でutf8で扱う
それ以外に方法はない
0640デフォルトの名無しさん
2007/05/11(金) 02:31:54^(?:\x83[\x40-\x96])+$
0641デフォルトの名無しさん
2007/05/11(金) 13:05:29(例えば test1.test.ne.jp→*.test.ne.jp)
その場合どのように表記すると良いでしょうか?
0642デフォルトの名無しさん
2007/05/11(金) 14:51:480643デフォルトの名無しさん
2007/05/11(金) 16:39:01^.+\.test\.ne\.jp$
0644デフォルトの名無しさん
2007/05/13(日) 12:07:25"HOGE MAGE"
"ARABIN DOBIN MAGE"
というのがあった場合、"DOBIN"が含まれていないつまり、"HOGE MAGE"のみをヒットさせたいです。
0645デフォルトの名無しさん
2007/05/13(日) 12:25:000646デフォルトの名無しさん
2007/05/13(日) 15:01:16その程度の処理なら態々正規表現を使うまでも無い
0647・∀・)っ-○◎●
2007/05/13(日) 15:09:250648デフォルトの名無しさん
2007/05/13(日) 15:21:570649デフォルトの名無しさん
2007/05/13(日) 16:38:44実際には、MAGEが共通じゃない場合もあり orz
>>646
んーと、確かに、そうなんだけど、
外部で弄れる設定が正規表現になってんだわ・・・
可搬性から、ソースの方をいじりたくないのです。
とおもって検索してたんですが
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ
これ見ると、簡単に書く方法はないのですね・・・。
正規表現も万能なわけではないのか
0650デフォルトの名無しさん
2007/05/13(日) 16:41:21こちらに、含まない正規表現をジェネレータがありました。
正規表現メモ - ある文字列を含まない正規表現
http://www.kt.rim.or.jp/~kbk/regex/regex.html#NOTINCLUDED
0651644=649=650
2007/05/13(日) 16:42:04o こちらに、ある文字列を含まない正規表現を生成するジェネレータがありました。
0652デフォルトの名無しさん
2007/05/13(日) 16:55:46↓
正規表現なるモノが解らないと少しの改変すら困難なようだ。
↓
そうだ2chでスレを探そう
↓
発見ナニこのスレ暗号!?
↓
1のサイトを見よう!
↓
脳沸騰中 ←今ココ○| ̄|_
0653デフォルトの名無しさん
2007/05/13(日) 17:31:220654デフォルトの名無しさん
2007/05/28(月) 01:09:390655デフォルトの名無しさん
2007/05/28(月) 01:41:17のんびりした板だねここは
0656デフォルトの名無しさん
2007/05/29(火) 23:09:080657デフォルトの名無しさん
2007/05/30(水) 11:40:440〜15までの数値がOKという処理をしたいのですがうまくできませんでした。
[0-9]+[0-9]*
など考えたのですが
二桁の数値の場合、例えば19、一桁目の1にマッチしてしまうようで
本来NGにしたいのですがOKになってしまいます。
0〜15までの数値はOK。他はNG。というような正規表現はどうやって書けるのでしょうか?
0658デフォルトの名無しさん
2007/05/30(水) 11:44:09[0-9]+[0-5]*
です。
0659デフォルトの名無しさん
2007/05/30(水) 11:46:160660デフォルトの名無しさん
2007/05/30(水) 12:56:46(
1[0-5] |
[0-9]
)
とか書くとエディットボックスに
(1[0-5]|[0-9])
と連結されて
さらにターゲットとなるテキストでマッチした行を抜き出す。
といったアプリというかGUIツールってないですかね。
それくらい自分で作ればいいんですけど・・・
0661デフォルトの名無しさん
2007/05/30(水) 14:42:48URL 思い出せないけど検索したら出るだろ
0662デフォルトの名無しさん
2007/05/30(水) 16:47:300663デフォルトの名無しさん
2007/05/30(水) 22:37:300664デフォルトの名無しさん
2007/05/30(水) 22:39:140665デフォルトの名無しさん
2007/05/31(木) 09:42:260666デフォルトの名無しさん
2007/05/31(木) 11:43:10「右端で折り返す」チェックしてて
実際行が長くて折り返されてるファイルを
うっかり上書きで保存してしまうと
勝手に改行挿入されて行が分かれるよねw
前はそんなことなかったのになぁ
いつからだろ
0667デフォルトの名無しさん
2007/05/31(木) 11:45:480668デフォルトの名無しさん
2007/05/31(木) 12:03:290669657
2007/05/31(木) 12:36:29どうも抜けてしまいます。
どこがおかしいのでしょうか。。phpで書いています。
if(!ereg("(1[0-5]|[0-9])",$chk){
//エラー処理
}
0670デフォルトの名無しさん
2007/05/31(木) 12:44:510671デフォルトの名無しさん
2007/05/31(木) 14:44:51とかか。こういうのはあまり正規表現でがんばらずに(\d+)で拾って範囲判定したほうが手っ取り早いと思うが。
0673デフォルトの名無しさん
2007/05/31(木) 22:14:09俺もそう思う。
(1[0-5]|[0-9]) を見て、ぱっと 0 〜 15 を思い浮かべられる奴はそうそういない。
趣味でやってるなら余計なおせっかいだけどね。
0674デフォルトの名無しさん
2007/05/31(木) 22:29:560675デフォルトの名無しさん
2007/05/31(木) 22:44:11逆にその発想はなかったwwwww
0676・∀・)っ-○◎●
2007/05/31(木) 22:44:27([0-9]|1[0-5])
0677デフォルトの名無しさん
2007/05/31(木) 23:00:3910以上にマッチしない
0678デフォルトの名無しさん
2007/06/01(金) 00:46:560679デフォルトの名無しさん
2007/06/01(金) 00:59:291行のみ残したいのですが、どうしたらよいでしょう?
"^\n"→""と置換すると1行目と5行目がくっついてしまいます。。
(1行目)│正規
(2行目)│
(3行目)│
(4行目)│
(5行目)│表現
↓
(1行目)│正規
(2行目)│
(3行目)│表現
0680デフォルトの名無しさん
2007/06/01(金) 01:04:49つこうたことないから知らんけど。
0681デフォルトの名無しさん
2007/06/01(金) 13:13:31だめ?
0682デフォルトの名無しさん
2007/06/01(金) 15:26:170683デフォルトの名無しさん
2007/06/02(土) 17:04:06ハイフンはエスケープしなくても通用するが
ゴチャゴチャするからエスケープ文字が連続してるところでは
1文字ずつエスケープするのが常識なんだよ
0684デフォルトの名無しさん
2007/06/02(土) 17:17:140685デフォルトの名無しさん
2007/06/02(土) 17:32:51そのくらいでゴチャゴチャとか言うなよ能無し
0686デフォルトの名無しさん
2007/06/02(土) 20:34:47[\w\.\/\?-]
↓機能追加するとき
[\w\.\/\?-0-9]
ってやってしまうとどうなるの?
0687デフォルトの名無しさん
2007/06/02(土) 21:29:570688デフォルトの名無しさん
2007/06/02(土) 21:52:300689デフォルトの名無しさん
2007/06/02(土) 22:11:36そんな無能がいる会社なら珍妙な書き方をするのも止むを得んな。
0690デフォルトの名無しさん
2007/06/02(土) 22:23:25まともな会社は正規表現禁止ってのも多い。
趣味でウェブプログラミングするくらいなら好きにすればいいけど。
0691デフォルトの名無しさん
2007/06/02(土) 22:39:350692デフォルトの名無しさん
2007/06/02(土) 22:51:200693デフォルトの名無しさん
2007/06/02(土) 23:42:48となったときに
()の中の色を別々にとりだせますでしょうか??
0694デフォルトの名無しさん
2007/06/03(日) 00:29:10でもそんな無駄な努力をしてる暇があったら、カッコの中をまとめて
取り出してからsplitした方が楽。
0695デフォルトの名無しさん
2007/06/03(日) 01:35:100696デフォルトの名無しさん
2007/06/03(日) 02:04:08任意個数は無理ですよね。アドバイスありがとうです。
splitを勉強してまいります。
0697デフォルトの名無しさん
2007/06/03(日) 04:18:05出遅れたが、俺は683にあるような無用なエスケープをつけまくるほうが嫌いだ。
-に関しては譲歩の余地はあるけどね。
0698デフォルトの名無しさん
2007/06/03(日) 17:27:48char *target = "";
if(BMatch("/\\w+/", target + str(target), breg, msg)) printf("err:%s\n", msg);
とやると
err:invalid target parameter
となってしまうんですが、tagetが空文字列のときはマッチさせない(というかエラーを出さない)ようにはできないですか?
0699デフォルトの名無しさん
2007/06/03(日) 20:24:390700デフォルトの名無しさん
2007/06/03(日) 23:54:100701デフォルトの名無しさん
2007/06/04(月) 00:15:550702デフォルトの名無しさん
2007/06/06(水) 17:44:530703デフォルトの名無しさん
2007/06/06(水) 17:58:360704デフォルトの名無しさん
2007/06/06(水) 18:24:11昨日注文しちゃったんですが、この本でも桶?
0705デフォルトの名無しさん
2007/06/06(水) 19:19:22数列を解読するのが辛い人はドラゴンブック
0706デフォルトの名無しさん
2007/06/06(水) 19:45:02どうもです。キャンセルできたんで、もう少し検討してみます。
0707デフォルトの名無しさん
2007/06/06(水) 21:55:360708デフォルトの名無しさん
2007/06/07(木) 16:30:09一瞬ばかにされたかと思ったら、コンパイラの本のことか・・・
0709デフォルトの名無しさん
2007/06/07(木) 16:39:470710デフォルトの名無しさん
2007/06/07(木) 22:06:27名前、メール欄、日付、曜日、時刻、ID、その他(BEなど)、本文、スレタイ
以上を後方参照で使えるようにするにはどのように表現したら良いでしょうか?
以下にとあるスレのログサンプルを置いておきます。
名無しさん<>sage<>2007/06/07(木) 21:57:04 ID:???<> <a href="../test/read.cgi/kitchen/1181221024/1" target="_blank">>>1</a> <>専用ブラウザのログのテスト
a<><>2007/06/07(木) 21:57:52 ID:7FjnB1uN<> http://2ch.net/ <>
名無しさん<>sage<>2007/06/07(木) 21:58:35 ID:??? BE:10425941-2BP(2059)<> 改行 <br> と <br> BEのテスト <>
</b>◆h67iCpDPo. <b><>sage<>2007/06/07(木) 21:59:30 ID:???<> トリップテスト <>
0711デフォルトの名無しさん
2007/06/07(木) 22:13:39名前<>メール欄<>日付(曜) 時刻 ID その他<> 本文<>スレタイ
で表され、メール欄、ID、その他、スレタイは投稿内容や板の設定によっては空欄の可能性があります。
0712デフォルトの名無しさん
2007/06/07(木) 22:24:090713デフォルトの名無しさん
2007/06/07(木) 22:35:030714719
2007/06/07(木) 22:35:51なるほど…'<>'で5つに分けて、
その後真ん中を' 'でもう一度splitすれば行けそうですね。
IDが無かった場合などの例外処理などが面倒そうですがちょっと試してみます。
0715710
2007/06/07(木) 22:38:06>>713
環境の問題などがあるかもしれないので「Ruby」と書いたのですが、
可能ならば正規表現で取り出したかったので…
スレ違いなら申し訳ない。
0716デフォルトの名無しさん
2007/06/08(金) 07:42:48というのはすんなり書けないものですかね。
0717デフォルトの名無しさん
2007/06/08(金) 08:39:380718デフォルトの名無しさん
2007/06/09(土) 20:44:03<tr>
<td>あああ</td>
</tr>
<tr>
<td>いいい</td>
</tr>
</table>
という$htmlがあって消したい部分は
<tr>
<td>bbb</td>
</tr>
の3行です
いろいろ検索などして
$html = preg_replace("/<tr>.+?[^<tr>].+?いいい.+?<\/td>/is", "", $html);
とやってみたのですが最初の<tr>からずばっと消えてしまいます
phpなのですが、ご教示いただけないでしょうか
0719デフォルトの名無しさん
2007/06/09(土) 22:11:17アチャー
0720デフォルトの名無しさん
2007/06/09(土) 23:29:44/ 0.ヽ
// ||ヽヽ
(( / ヽ))
ヽヽ//
ヽ/
0721デフォルトの名無しさん
2007/06/10(日) 03:21:26もうちょっとどういうテキストを扱いたいのか考えてみ。
そこに書いているのだけから考えると、改行をパターンに
入れときゃいいだけじゃないの?
<tr>\n<td>....
みたいに。
0722デフォルトの名無しさん
2007/06/10(日) 11:21:46経産婦
0723デフォルトの名無しさん
2007/06/10(日) 15:05:37<table> <tr><td>あああ</td></tr> <tr><td>***</td><td>いいい</td></tr> </table>
本当は改行やスペースなどが入っているのですが、
“いいい“から左方向に一番近い <tr> から、右方向に一番近い </tr> までの
<tr><td>***</td><td>いいい</td></tr>
の部分を消したいです
よろしくお願いいたします
0724デフォルトの名無しさん
2007/06/10(日) 15:17:020725デフォルトの名無しさん
2007/06/10(日) 16:00:21ある文字列とある文字列を含むものにマッチする正規表現
(?=.*foo)(?=.*bar)
(?=.*foo)(?=.*bar)(?=.*hoge)
てのはPerlでない場合には
(.*foo)?(.*bar)?
(.*foo)?(.*bar)?(.*hoge)?
こうなるんでしょうか?
それとも別の表現にしないといけないの?
0726デフォルトの名無しさん
2007/06/10(日) 18:08:09PHPはよくわからないがPerlならこう書く
$html=~s{<tr><td>[^<]+</td><td>\Qいいい\E</td></tr>}{}
だが厳密にはこう書くかな
$html=~s{<table>(.*?)</table>}{
my $lines;
for ($1 =~ m{\s+<tr>.*?</tr>\s+}g) {
$lines .= $_ unless m/\Qいいい\E/;
}
"<table>$lines</table>";
}eg;
0727デフォルトの名無しさん
2007/06/10(日) 20:02:30(foo.*bar|bar.*foo)
(foo.*(bar.*hoge|hoge.*bar)|bar.*(foo.*hoge|hoge.*foo)|hoge.*(foo.*bar|bar.*foo))
0728デフォルトの名無しさん
2007/06/10(日) 21:10:25(?=.*a)(?=.*b)(?=.*c)(?=.*d)(?=.*e)はどうなりますか?
0729デフォルトの名無しさん
2007/06/10(日) 21:15:21*e|e.*b)|e.*(b.*d|d.*b))|d.*(b.*(c.*e|e.*c)|c.*(b.*e|e.*b)|e.*(b.*c|c.*b))|e.*(b
.*(c.*d|d.*c)|c.*(b.*d|d.*b)|d.*(b.*c|c.*b)))|b.*(a.*(c.*(d.*e|e.*d)|d.*(c.*e|e.
*c)|e.*(c.*d|d.*c))|c.*(a.*(d.*e|e.*d)|d.*(a.*e|e.*a)|e.*(a.*d|d.*a))|d.*(a.*(c.
*e|e.*c)|c.*(a.*e|e.*a)|e.*(a.*c|c.*a))|e.*(a.*(c.*d|d.*c)|c.*(a.*d|d.*a)|d.*(a.
*c|c.*a)))|c.*(a.*(b.*(d.*e|e.*d)|d.*(b.*e|e.*b)|e.*(b.*d|d.*b))|b.*(a.*(d.*e|e.
*d)|d.*(a.*e|e.*a)|e.*(a.*d|d.*a))|d.*(a.*(b.*e|e.*b)|b.*(a.*e|e.*a)|e.*(a.*b|b.
*a))|e.*(a.*(b.*d|d.*b)|b.*(a.*d|d.*a)|d.*(a.*b|b.*a)))|d.*(a.*(b.*(c.*e|e.*c)|c
.*(b.*e|e.*b)|e.*(b.*c|c.*b))|b.*(a.*(c.*e|e.*c)|c.*(a.*e|e.*a)|e.*(a.*c|c.*a))|
c.*(a.*(b.*e|e.*b)|b.*(a.*e|e.*a)|e.*(a.*b|b.*a))|e.*(a.*(b.*c|c.*b)|b.*(a.*c|c.
*a)|c.*(a.*b|b.*a)))|e.*(a.*(b.*(c.*d|d.*c)|c.*(b.*d|d.*b)|d.*(b.*c|c.*b))|b.*(a
.*(c.*d|d.*c)|c.*(a.*d|d.*a)|d.*(a.*c|c.*a))|c.*(a.*(b.*d|d.*b)|b.*(a.*d|d.*a)|d
.*(a.*b|b.*a))|d.*(a.*(b.*c|c.*b)|b.*(a.*c|c.*a)|c.*(a.*b|b.*a))))
0730デフォルトの名無しさん
2007/06/10(日) 22:34:44順番を考慮したパターンを書かないといけないんだね。
ありがとう。
0731デフォルトの名無しさん
2007/06/10(日) 23:51:39出来ないのかな。
perlの例は726が書いてるけど、phpだったらstrposとかで
該当する部分を切り出しておいて投げる、みたいなことを
しなくちゃいけないのかなあ。
#うちもperl→phpにシフトする案件が結構増えてるんですさん。
0732デフォルトの名無しさん
2007/06/11(月) 00:15:37正規表現だけでは出来そうで出来ない
プログラマ脳では出来そうなんだけどね
0733デフォルトの名無しさん
2007/06/11(月) 00:35:33こんなこともできないのか〜〜〜〜〜〜、正規表現
0734デフォルトの名無しさん
2007/06/11(月) 00:37:590735デフォルトの名無しさん
2007/06/11(月) 00:39:020736デフォルトの名無しさん
2007/06/11(月) 00:40:070737デフォルトの名無しさん
2007/06/11(月) 06:04:47文字実体参照にマッチさせるにはどうしたらいいんでしょう?
「hoge」 にも 「ho&#8206;ge」 にも 「h&#lrm;o&#8207;g&#rlm;e」 にもマッチするような…
0738デフォルトの名無しさん
2007/06/11(月) 09:31:580739デフォルトの名無しさん
2007/06/11(月) 10:01:04737はあくまで例で、どんな実体参照の一文字が入っててもOK、見たいなこと出来ませんか?
h?o?g?eの正規表現版みたいな感じで…
0740デフォルトの名無しさん
2007/06/11(月) 12:33:45或いは逆に、全て実体参照にしてから処理するかw
0741デフォルトの名無しさん
2007/06/11(月) 16:57:580742デフォルトの名無しさん
2007/06/11(月) 18:54:24さんくすぅ!思ったとおりの動作になりました
>>740
JaneでNGワードに指定しても、文字間に実体参照入れてNGを回避してくる輩がいるもんで…
0743デフォルトの名無しさん
2007/06/11(月) 18:59:480744ぴかちゅう
2007/06/12(火) 13:49:07教えてください!
0745デフォルトの名無しさん
2007/06/12(火) 13:59:58なんかの課題か?
0746デフォルトの名無しさん
2007/06/12(火) 14:02:380747ぴかちゅう
2007/06/12(火) 14:02:390748ぴかちゅう
2007/06/12(火) 14:06:350749デフォルトの名無しさん
2007/06/12(火) 16:44:46ですませたいところだが別のflexが
ひっかかるようだからサービスしておこう
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/flex-2.5.4/flex_toc.html
0750デフォルトの名無しさん
2007/06/16(土) 23:16:15みたいな3語以上の表現の繰り返しを探したいんですが、
正規表現チェッカーというソフトでは
(.+)(.+)\1\2
で、抜き出されるんですが、Devasというソフトだとmax regex search depth
exceededとエラーが出ます。神様、お導きを・・・
0751デフォルトの名無しさん
2007/06/16(土) 23:57:18それだと2文字以上の繰り返しのような気が。
(...+)\1
だとどう?
0752750
2007/06/17(日) 00:23:11> (...+)\1
これもだめですー。(><)
0753デフォルトの名無しさん
2007/06/17(日) 00:31:24speeeeed + bregonig.dll を使うとか。
0754デフォルトの名無しさん
2007/06/17(日) 02:59:34どのくらいの大きさのファイル食わせた?
エラーメッセージからすると、バックトラック用に積んでいたスタックが
あふれたという感じだけど。
750のパターンでも、751でもマッチする文字列が見つからない場合にバックトラック用に
スタックに積んでくのは結構な寮になると思うぞ。
検索する語の最大長を指定するなりしてはどうか。
そのツールでできるかは知らんがね。
0755デフォルトの名無しさん
2007/06/17(日) 05:10:23↑
これが乳房AAに見えて仕方ない。orz
0756デフォルトの名無しさん
2007/06/17(日) 06:21:58ついでにいうと、NHK大阪の夕方の女子アナの顔な。
0757デフォルトの名無しさん
2007/06/17(日) 13:48:580758デフォルトの名無しさん
2007/06/17(日) 13:57:120759750
2007/06/17(日) 14:00:34>>753
探して使ってみます。
>>754
一つのファイルは100〜500kくらいですが、フォルダ内のファイル全部では330Mほどになりますです。Devas以外ではKWIC Finderというのを使っていて、こちらは完全にプログラムが落ちます。
>検索する語の最大長
なるほど。ありがとうございます。
0760デフォルトの名無しさん
2007/06/18(月) 14:29:50「@株主 ★」があると一致しない正規表現を教えてください。
0761デフォルトの名無しさん
2007/06/18(月) 17:17:040762デフォルトの名無しさん
2007/06/18(月) 17:33:560763デフォルトの名無しさん
2007/06/18(月) 17:37:100764デフォルトの名無しさん
2007/06/18(月) 18:14:02書けるけどすごくめんどくさいよ。
「a」があるけど「xya」がない文字列ならこんな感じ。文字数ふえても
同じようなやりかたでいけるはず。
^([^a]*(([^x]|^)y|[^y]|^)a)+[^a]*$
「★」があるかどうかの判定と「@株主 ★」がない判定の2つに分ける
ことをオススメする。
0765デフォルトの名無しさん
2007/06/18(月) 18:32:05できました!
^([^★]*(((([^@]|^)株|[^株]|^)主|[^主]|^) |[^ ]|^)★)+[^★]*$
ブラウザの設定を弄ってるのでそういった分岐は書けないんです。助かりました。
0766デフォルトの名無しさん
2007/06/18(月) 20:48:10正規表現(自分で作ったルール)を使って文字列を変換すると、
パソコンで表現
が
パャRンで阜サ
のように変換されてしまいます。
これは、自分で作った変換ルールに誤りがあるからでしょうか?
変換には、クリップボード拡張ソフト「ペースター」のv3.08を使っています。
変換ルールは
s/^\s+|\n+|\\|\/|\:|\,|\;|\?|\"|\<|\>|\|//gm
です。
これは、Web上の文字列を、そのままコピペしてWindows上のフォルダ名にしたい時に、
(フォルダ名として)不適切な文字(\/:,;*?"<>|)や、他に、改行、空白を取り除く事を目的としています。
どのようにすれば改善されるか分かる方いませんか?
0767デフォルトの名無しさん
2007/06/18(月) 21:14:010768デフォルトの名無しさん
2007/06/18(月) 21:25:26文盲ワロタw
0769デフォルトの名無しさん
2007/06/18(月) 21:40:08改善っていうか、それは正しく稼働した結果じゃねーの?
パソコンで表現
8370 835C 8352 8393 82C5 955C 8CBB
パャRンで阜サ
8370 83-- 8352 8393 82C5 95-- 8CBB
shiftjisのコードから、0x5Cが排除された結果みたいだし
0770デフォルトの名無しさん
2007/06/18(月) 22:47:310771デフォルトの名無しさん
2007/06/18(月) 22:56:57何かしら制約やら性能低下を伴うのが普通。
例外が鬼車とかboostとかなわけで。
GNU grepのdfa.c見てるけど歴史の呪縛感じるなぁ。
0772デフォルトの名無しさん
2007/06/18(月) 23:55:570773デフォルトの名無しさん
2007/06/19(火) 00:01:54細かい設計と精密なデバッグを要求する職人芸は
商用ソフトでは採算が取れないだろう。
気の遠くなるような時間を浪費できるフリーソフトならではの世界w
0774デフォルトの名無しさん
2007/06/19(火) 10:38:370775766
2007/06/21(木) 01:06:31アプリ側の限界という結論になるのでしょうか?
仕方ないですね。
2chブラウザJaneを使っているんですが、更新チェックしていたつもりが、
なぜかこのスレだけチェックされていませんでした。
返信がおそくなってすいませんでした。
0776デフォルトの名無しさん
2007/06/21(木) 14:46:11んーと、そのソフトの仕様的に可能なのかはわかんないけど、
Shift_JIS に合致するモノは残す、という方針でいけないかな?
s/(([\w\d\xA1-\xDF\!\#\$\%\&\'\(\)\+\-\.\=\@\[\]\^\_\`\{\}\~]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])|(.))/\2/gm;
0777デフォルトの名無しさん
2007/06/22(金) 01:54:420778デフォルトの名無しさん
2007/06/22(金) 09:15:210779デフォルトの名無しさん
2007/06/22(金) 09:58:43だよね・・・
最初エスケープ付けずに書いてたんだけど、
どの文字がエスケープ不要でどの文字が必要かあやふやだったので、
いっそのこと、全てに付けた方がすっきりすると思ってあんなコードに・・・
問題: A と等価な正規表現になるように B を必要最小限エスケープして下さい (持ち込み不可)
A: /[\!\#\$\%\&\'\(\)\+\-\.\=\@\[\]\^\_\`\{\}\~]/
B: /[!#$%&'()+-.=@[]^_`{}~]/
0780デフォルトの名無しさん
2007/06/22(金) 10:16:35宿題はスレ違い
0781デフォルトの名無しさん
2007/06/22(金) 10:18:55/[\Q!#\$\%&'()+-.=\@[]^_`{}~\E]/
0782デフォルトの名無しさん
2007/06/22(金) 11:01:35最新十数レスぐらい読もうよ
0783デフォルトの名無しさん
2007/06/22(金) 11:03:47残念ながら間違い。ね、難しいでしょ?
よっぽど Perl に精通してるならともかく、そうでないのなら、
全てエスケープする、というルールの方がずっとシンプルで良いと思うんだけどなあ。
まあ、時と場合によって使い分けも必要かなとも思うけど。
0784デフォルトの名無しさん
2007/06/22(金) 13:21:050785デフォルトの名無しさん
2007/06/22(金) 13:22:120786デフォルトの名無しさん
2007/06/22(金) 13:34:390787779
2007/06/22(金) 17:30:13すみません、出題しといてなんですが、私には難しくてわかりません。
エスケープしない派の方、教えて下さい。
こうかなあ?間違ってそうだなあ。
/[!#\$%&'()+\-.=@[\]^_`{}~]/
順番入れ換え可ならもっと短くなるかな。
/[]!#\$%&'()+.=@[^_`{}~-]/
0788デフォルトの名無しさん
2007/06/22(金) 18:30:500789デフォルトの名無しさん
2007/06/22(金) 19:51:55すると、このスレで実際に使ってる人はあまりいないようですね・・・
0790デフォルトの名無しさん
2007/06/22(金) 21:04:05sedの/\(A\)/はRubyの/(A)/と同じ。
sedの/(A)/はRubyの/(A)/と同じ。
だから、ムダにエスケープ付けるなが正解だし
プログラム作る人の都合だからどっちが真実でもないw
0791デフォルトの名無しさん
2007/06/22(金) 21:04:48sedの/(A)/はRubyの/\(A)\/と同じ。
0792デフォルトの名無しさん
2007/06/22(金) 21:07:45>>781のどこが間違い?
0793デフォルトの名無しさん
2007/06/23(土) 00:02:41> だから、ムダにエスケープ付けるなが正解だし
正解と言えるかなあ?
Ruby を引き合いに出してるみたいだから言及するけど、
「記号を全て \ でエスケープする」というルールにしておけば、
Perl でも Ruby でも同じ正規表現が使える、という利点もあります。
めんどくさいルールを覚えなくてもとにかく全部 \ エスケープすればいい、
という仕様は lwall の優しさだと思っているんですが、どうでしょうか?
>>792
実際に使えば・・・、じゃなくて、実際にテストすればわかると思いますが、
$ や @ はエスケープしないと変数展開されてしまいますが、
エスケープしたらしたで今度は '\$' や '\@' というリテラル文字列として扱われ、
文字クラスに '\' が含まれてしまうことになります。
詳しくは perldoc perlre にそのものずばり書いてますのでそちらを参照ください。
ねえ、だから難しいんですってば。
0794デフォルトの名無しさん
2007/06/23(土) 00:31:12>>781をもう一度目ぇかっぽじってよく見てみろ
0795デフォルトの名無しさん
2007/06/23(土) 00:32:01エスケープしたら…以降読んでなかった
目ぇかっぽじって読むのは自分だった
0796デフォルトの名無しさん
2007/06/23(土) 00:34:15ごめん
0797デフォルトの名無しさん
2007/06/23(土) 02:14:510798デフォルトの名無しさん
2007/06/23(土) 03:15:14メタ文字を、記号の場合はすべて\の前置なし、アルファベットは前置するとしたのは
lwallのえらいところだと思うけどね。
ブラケットの中では
・記号類のメタ文字無効
・] と - は置き場所によってはエスケープ不要
・delimiterによってjは / をエスケープする必要がある
・interpolationを防ぐため$ をエスケープしておいたほうが良い
てとこ?
Cのカッコと同じで、わかりやすくするためにつけたい奴はつければいいんじゃないの?
俺はそういうやり方は好かないどね。
> エスケープしたらしたで今度は '\$' や '\@' というリテラル文字列として扱われ、
> 文字クラスに '\' が含まれてしまうことになります。
> 詳しくは perldoc perlre にそのものずばり書いてますのでそちらを参照ください。
\も含まれてしまうというこれ再現しないんだが(ActivePerl 5.8.8)。
あとpetlreのどの辺りなのかも教えてくんなまし。
それらしいところが見当たらない。
0799デフォルトの名無しさん
2007/06/23(土) 06:31:01\xとか\uとか
0800デフォルトの名無しさん
2007/06/25(月) 10:01:25> \も含まれてしまうというこれ再現しないんだが(ActivePerl 5.8.8)。
マジっすか?
漏れがテストに使ったコードを貼っておきます。
my $src = <DATA>; chomp($src);
my $exp = $src;
$exp =~ s/[\!\#\$\%\&\'\(\)\+\-\.\=\@\[\]\^\_\`\{\}\~]//gm;
my $dst = $src;
$dst =~ s/[\Q!#\$\%&'()+-.=\@[]^_`{}~\E]//gm;
print "EXP: [$exp]\n";
print "DST: [$dst]\n";
printf "%s\n", ($dst eq $exp) ? "OK" : "NG";
__END__
1A!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
> あとpetlreのどの辺りなのかも教えてくんなまし。
| You cannot include a literal "$" or "@" within a "\Q" sequence. An
| unescaped "$" or "@" interpolates the corresponding variable, while
| escaping will cause the literal string "\$" to be matched. You'll need
| to write something like "m/\Quser\E\@\Qhost/".
0801デフォルトの名無しさん
2007/06/25(月) 16:01:13そりゃブラケットの外の話だろう。
ブラケットの中では、記号で表されるメタ文字は
二つの例外を除けば普通の文字だから
\Qとか使う必要ないって。つか無意味。
逆にこれをしているせいで\もマッチするように
なってしまっている。
perlreのversion 8 Regular Expressionの
三番目のパラグラフのあたりをよく読んでごらん。
0802デフォルトの名無しさん
2007/06/25(月) 16:45:14けど、 \Q...\E については、ブラケットの中でも効いていると思います。
\t とか \r とか \n とか \x1B とかも使えますけど、それと同等だと思います。
> Because patterns are processed as double quoted strings,
> the following also work:
0803デフォルトの名無しさん
2007/06/26(火) 01:53:21無意味っていったのは、効く効かないという意味でじゃなくてね。
s/[\Q!#\$\%&'()+-.=\@[]^_`{}~\E]//gm;
だと、\$ はそれぞれに対して\Qの効果が反映するから、\\\$になって
ブラケットの中に含まれる文字の中に\ も入るよ。
この\は$のエスケープのためにいれてんだから意味ないんじゃね?
つーことなんだけど。
[$] はエラーになるけど、[\$] はエラーにならなくて、かつ$は含まれていて
\は含まれない。ということで >>793 で求めているものはこれでいいんじゃないの?
>perl -e "print qr<[\Q\$\E]>"
(?-xism:[\\\$])
>perl -e "print qr<[\$]>"
(?-xism:[\$])
>perl -e "print qr<[$]>"
Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE 5.008008/
長くなった。すまん、
0804デフォルトの名無しさん
2007/06/26(火) 02:48:20ああ、やっと >>801 の言っている意味がわかりました。了解です。
つか、それを私も >>783, >>793 で指摘したつもりだったんですが・・・
まあいいや。
0805デフォルトの名無しさん
2007/06/26(火) 05:39:550806デフォルトの名無しさん
2007/06/27(水) 22:56:50つか今出せば早期対応なのかな。
0807デフォルトの名無しさん
2007/06/28(木) 02:08:56どういう意味で完全対応ってのを使っているのかわからんが、
GNU grep はUTF-8でもちゃんと動くぞ。
#grep -E でegrep相当の動作。もっとも egrep という名前でシンボリックリンクが
#作られてたりするけどね。
0808デフォルトの名無しさん
2007/06/28(木) 09:59:260809デフォルトの名無しさん
2007/06/28(木) 19:58:360810デフォルトの名無しさん
2007/06/29(金) 22:06:19は?
0811808
2007/06/30(土) 13:25:22egrep ではない (拡張正規表現は扱えない) と言いたかったんじゃないかな。
ハッキリそう言えば良いのに、と思わないでもないが。
0812デフォルトの名無しさん
2007/06/30(土) 21:03:19正規表現の使い方教えてください。
$str = "sfhipsfpihosf";
#$str = "fdjsdfesfifoo";
print $str =~ /(?:(?!foo).)*/ ;
結果1になってしまいます。
0813デフォルトの名無しさん
2007/06/30(土) 22:13:540814デフォルトの名無しさん
2007/07/01(日) 00:44:04print $str !~ /(?:(?!foo).)*/ ;
0815デフォルトの名無しさん
2007/07/01(日) 14:29:22にマッチする正規表現が分からないので教えて下さい。aとbは含みません。
よろしくお願いします
0816815
2007/07/01(日) 14:30:230817デフォルトの名無しさん
2007/07/01(日) 14:32:220818デフォルトの名無しさん
2007/07/01(日) 14:33:220819デフォルトの名無しさん
2007/07/01(日) 14:34:230820815
2007/07/01(日) 14:51:01出ませんね;;;
>>818
aとbも含まれてしまいました……
>>819
情報の後出しになってしまって申し訳ないのですが、
JavaScriptで使いたいのですが正規表現のエラーが出ました
0821815
2007/07/01(日) 14:55:15ありがとうございました
0822デフォルトの名無しさん
2007/07/01(日) 14:55:470823デフォルトの名無しさん
2007/07/01(日) 16:44:40WScript.echo('fklsja89bfdlkj'.match(/a([0-9][0-9])b/)[1]);//必ずある場合
WScript.echo(('fklsja8df9bfdlkj'.match(/a([0-9][0-9])b/))?RegExp.$1:'null');//有るかどうかわからない場合
0824デフォルトの名無しさん
2007/07/01(日) 21:48:140825デフォルトの名無しさん
2007/07/02(月) 00:27:370826デフォルトの名無しさん
2007/07/02(月) 02:38:28「aという文字とbという文字とに挟まれた2桁の数字」
という質問に対しては、
anna
annb
bnna
bnnb
という組み合わせが考えられる
0827デフォルトの名無しさん
2007/07/02(月) 03:13:02bnna
どっちかだろ
まあ既に解決したみたいだが
0828デフォルトの名無しさん
2007/07/03(火) 17:10:05annaはbという文字にはさまれてないだろ。
0829デフォルトの名無しさん
2007/07/03(火) 19:51:55これないの?
0830デフォルトの名無しさん
2007/07/03(火) 20:32:36どのように記述すればよろしいでしょうか?
[\r\n]+ を \r\n で置換しようとしたところ、例えば三つ以上ある改行が
三つの改行に変換されるだけで変化が起こりません。
0831デフォルトの名無しさん
2007/07/03(火) 22:48:39それで、使用している処理系も試したコードも晒さないのには何か理由でもあるのかね?
0832デフォルトの名無しさん
2007/07/04(水) 02:00:04戻り読みか。
鬼車を使っているバージョンなら使えるはずだが、そうでなければ使えない。
0833デフォルトの名無しさん
2007/07/04(水) 02:05:28否定の先読みで改行のみの行も同時に省きたいとき、
^(?!abc.+)\r\n
ではだめで、
^((?!abc).+)\r\n
ならおkでした。なんで?
0834デフォルトの名無しさん
2007/07/04(水) 02:55:56すまんが「改行のみの行『も』」というなら、どういう行をマッチさせたかったのか
書いてはくれまいか?
0835830
2007/07/04(水) 21:13:35------ a.txt -------
a
b
c
------------------
このようなファイルがあった時、改行が無駄なので
------------------
a
b
c
------------------
といった風に置換させたいのです。
試したやり方は置換前の文字列で [\r\n]+ 置換後の文字列で \r\n
です。すみません、わかりにくかったらスルーしてください。
0836デフォルトの名無しさん
2007/07/04(水) 21:49:530837831
2007/07/04(水) 22:12:29いや、その回答でおけ。
で、サクラエディタをインスコして試してみたけど、 >>836 の言うとおりみたい。
たとえば、 >>835 の例のテキスト (10行ある) で [\r\n]+ を「すべて置換」してみると、
「10箇所を置換しました。」って出るので、改行は一行ごとにしか処理できないっぽい。
0838デフォルトの名無しさん
2007/07/04(水) 22:25:16[\r\n]+ ⇒ ##@@## に変換
##@@##+ ⇒ \r\n に変換
でいけるべ。
0839835
2007/07/04(水) 22:46:55ありがとうございました。>>838様のレスでどうやら解決できたようです。
>>837様におきましては、インストールしてまで試して頂いきお手間をかけて
しまって何だか申し訳ないです。しかしともあれありがとうございました(*´Д`)
0841834
2007/07/05(木) 02:21:41ああ、そういうことね。
^(?!abc.+)\r\n
こっちだと、先読みに .+ を含めちゃっているので実際にマッチした文字列には反映されないでしょ。
^((?!abc).+)\r\n
こっちは先読みの外に .+ があるから、マッチには行頭から \r\nまでの内容がすべて含まれる。
先読みはマッチそのものの結果を得るだけでマッチした部分はどこにも残らないから。
0842デフォルトの名無しさん
2007/07/05(木) 12:47:19if(preg_match"/" ^[^a-zA-Z0-9]*$ "/"){全角も入ってるよ;}
こんな感じでいいのでしょうか?
この場合改行文字の扱いがされなさそうですが・・・
0843デフォルトの名無しさん
2007/07/05(木) 13:16:380844デフォルトの名無しさん
2007/07/05(木) 13:32:250845デフォルトの名無しさん
2007/07/05(木) 17:46:010846デフォルトの名無しさん
2007/07/07(土) 03:48:32改行コードの\r\nを\nひとつみたいに振る舞えさせることってできますかね?
たとえば
.は\rにマッチしてしまいますがマッチしないように
\nは\nだけにマッチしますが\r\nにマッチするように
\sは\rと\n1個ずつマッチしていきますがいっきに\r\nにマッチするようにって感じです。
0847デフォルトの名無しさん
2007/07/07(土) 04:27:45振る舞え……
0848デフォルトの名無しさん
2007/07/07(土) 08:09:13USE_CRNL_AS_LINE_TERMINATOR
0849846
2007/07/07(土) 15:01:31振る舞わせるか
>>848
どうもありがとうございます、でも
USE_CRNL_AS_LINE_TERMINATORを有効にしてコンパイルしてみましたが
求めていたのとはちと違うみたいです。
0850デフォルトの名無しさん
2007/07/07(土) 17:40:14$の挙動が変わるだけだっけ?
0851デフォルトの名無しさん
2007/07/09(月) 01:01:06現在使用しているソフトはこちらのRepl-Aceというものです。
ttp://www.sirmiles.com/software/repl_ace.htm
(1)「AあBいAうえBおあAいうえBおあいAうえおあBいうえお」
(2)「A亜BイA宇江BオアA井宇江BオアイA宇江尾亜Bイウエオ」
A以降 あいうえお→亜井宇江尾
B以降 あいうえお→アイウエオ
正規表現というと今まで改行や空白の処理にしか使っていなかったのですが、
上記のような文字列に関して、(1)から(2)に変換する処理を行おうとするに当たり、
こういった特定の文字を境に別々の変換をするのも正規表現を使うことで可能であるとお聞きして、
>>1の二番目のサイトの“タグの外側だけ対象に置換する”で<>をABと考えるのが近いかと思ったのですが、
そのまま貼り付けても処理に失敗し、下のサポートする正規表現の一覧に載ってない記号が多く、
ttp://www.sirmiles.com/software/repl_ace/contents/regexp.htm
自分ではもはや何をどう変えたらいいやらお手上げですので、どなたかご指南ください。
0852デフォルトの名無しさん
2007/07/09(月) 02:22:17正規表現でどうこうって話じゃないと思うが。
一部の言語でできる、置換部に関数を置くこととができるならそりゃまあ
書けなくもないだろうけど、そういうのはサポートしてないんでしょ? これ。
0853デフォルトの名無しさん
2007/07/09(月) 11:22:12851の(1)から(2)へ変換するスクリプト
適当に改造して使え
0854デフォルトの名無しさん
2007/07/09(月) 23:39:54当該スレを紹介されるにいたった経緯など、詳細はこちらをご参照ください。
http://pc11.2ch.net/test/read.cgi/software/1183546269/200-
回答者の方が今のソフトでも正規表現で出来るとおっしゃいまして、自分なりに考えたのが、
A以降でBより前のあ→亜
A以降でBより前のい→井
・
・
・
B以降でAより前のお→オ
というように一つ一つ指定していく上で、“X以降でYより前”の部分を正規表現で
示せるのではないかというものなのですが、やはり不可能なのでしょうか。
置換部に関数を置くとの意味がどういうことなのか分からず、試しようがないので、
サポート外か、ヘルプに記述がないだけで使えるのかは判断がつきかねます。
>>853
これは素晴らしいです。事前のファイル名とパスの指定が多少面倒とはいえ、
100KBほどの大きなドキュメントの置換も問題なく、動作は申し分ありません。
正規表現とは違った形になりましたが解決しそうです。まことにありがとうございました。
0855デフォルトの名無しさん
2007/07/09(月) 23:52:38直感的には、めんどい手順を何度も踏めば
正規表現置換でできると思われる
けど、やっぱり正規表現向きじゃないね。
回答者の人が君の質問を誤解してるか、
或いは正規表現の機能を誤解してるんだと思う。
0856デフォルトの名無しさん
2007/07/09(月) 23:57:17(A[^Bあ]*)あ([^B\n]*[B|\n]) -> \1亜\2
こういうのを全文字分用意すればいけそうな気がするが、
めんどくさいからスクリプト使え。
855に同意。
0857デフォルトの名無しさん
2007/07/11(水) 02:04:22面倒と言ってもその程度によりけりで、いったん定義ファイルを組んでしまえば、
後は次々放り込むだけで済むなら、最初に全文字分用意するくらい苦でもないのですが、
(1)「AあBあAああBああAあああBあああAああああBああああ」
(2)「A亜BアA亜亜BアアA亜亜亜BアアアA亜亜亜亜Bアアアア」
(A[^B]*)あ([^B]*B)→$1亜$2 では、それぞれAからBの間の後の一文字のみが変換され、
(A[^Bあ]*)あ([^B]*B)→$1亜$2 ですと、それが前の一文字のみになり、
(A[^Bあ]*)あ([^Bあ]*)あ([^B]*B)→$1亜$2亜$3 とすると、半端に前から二文字目までの上、
AからBまでにマッチする文字が二つに満たないグループがスキップされてしまいます。
置換箇所が0になるまで繰り返せばいいと言われればそれまでですけれども、
どうにかAからBまでの間の複数の置換を特定する方法はないものかだけが心残りです。
0858デフォルトの名無しさん
2007/07/11(水) 13:59:10明らかに正規表現にやらせる仕事じゃないだろ。
0859デフォルトの名無しさん
2007/07/11(水) 20:30:14マクロ組め
0860デフォルトの名無しさん
2007/07/11(水) 21:40:50いい加減それがエディタの制約だってことに気づけ。
つまり、複数の置換を同時に行う機能が無いんだよ。
0861デフォルトの名無しさん
2007/07/11(水) 21:48:32IPアドレスレンジを指定して正規表現を生成してくれるような汎用ツールは
ありませんでしょうか?
Web限定だとグーグル先生が公開してますが、このような物をローカルで
CUIで使いたいのです。
ttps://adwords.google.co.jp/support/bin/answer.py?answer=50012&topic=8157
用途は6000行程あるIPアドレスのレンジを置換等を駆使して手動で
正規表現を作成してたのですが、大分辛くなってきたので・・・
0862デフォルトの名無しさん
2007/07/11(水) 21:56:53正規表現でやるこっちゃ無い。
ビットマスクでやったほうが圧倒的に速いし簡単。
0863デフォルトの名無しさん
2007/07/11(水) 21:59:37詳しく教えてもらえませんか?
0864デフォルトの名無しさん
2007/07/11(水) 22:11:470865861
2007/07/11(水) 22:23:13イントラのあるサーバにアクセスしてきた端末が固定かDHCPで割り
振られているかを判断する必要があり、DHCPサーバのconfigから
range設定を拾い、正規表現を作成 ⇒ grepをかける、
というような感じです。
range設定はビットやマスクではなく、
10.192.17.3 〜 10.192.18.20
のような正規表現を作成しようとしている側からすると凶悪な
設定がされてます。
自分はVBSとシェルスクリプト(awk、sed含む)がちょっとだけできる
ので、自分で正規表現ジェネレータを作成しようとしましたが、
まず設計の段階であまりの複雑さに頭がパンクしました。
0866デフォルトの名無しさん
2007/07/11(水) 22:27:57IPアドレスは4byteの符号無し整数値に変換できるから大小比較すればそれで終わり。
0867デフォルトの名無しさん
2007/07/11(水) 22:34:280868861
2007/07/11(水) 23:12:15>IPアドレスは4byteの符号無し整数値に変換できるから大小比較すればそれで終わり。
それって、上で挙げたような"range設定を拾い、grepをかける"という事はできませんよね?
そういったプログラムを組め、と仰りたいのだと思いますが自分にはそこまでのスキルはありません。
アドレスレンジを正規表現にできれば汎用で使えると思い、時間をかけて調べていたのですが、
そういったツールは見つからず、またここで聞いてもわからない、という事であれば、存在
しないのだと思います。
レスしてくれた方ありがとうございました。
0869デフォルトの名無しさん
2007/07/11(水) 23:57:05つくってくださいスレに依頼すれば。
いや、仕事なら自分でやったほうが本人のためか。
0870デフォルトの名無しさん
2007/07/12(木) 01:15:22その、グーグルのページのソースを見れば?、スクリプトで書いてあるじゃん。
0871デフォルトの名無しさん
2007/07/12(木) 01:56:21>>870の言うとおり、要件を満たすだけなら、
スクリプトで書いてあるのでそれを使えばよい。
だけど、正規表現にすると、さっきのアドレスレンジが
^10\.192\.(17\.([3-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|((1[7-8])\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])))|18\.([0-9]|1[0-9]|20))$
こんな文字列に置換されてしまう。
これでは何か起きたときの保守性が悪すぎる。
どうせスクリプトか何かを使うんでしょ?
設定ファイルに
10.192.17.3 - 10.192.18.20
とか書けばそれで動くように仕組みを作るべきだね。
0872デフォルトの名無しさん
2007/07/12(木) 02:14:39みたいな正規表現を生成するのはOKなわけ?
0873デフォルトの名無しさん
2007/07/12(木) 02:15:17これちゃんと動いてなくね?w
192.168.1.1〜192.168.2.9の範囲で出てきた
^192\.168\.(1\.([1-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|(([1-2])\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])))|2\.([0-9]))$
を使って、EmEditorで検索すると、192.168.2.20が引っかかるんだが。
0874デフォルトの名無しさん
2007/07/12(木) 03:19:2949 235を引数で食わせたら、
((49)|([5-9][0-9])|(1[0-9][0-9])|(2[0-2][0-9])|(23[0-5]))
こういう出力が出せるようなのはできた
0875870
2007/07/12(木) 03:22:28これが、余計だね。
確認もしないで、薦めてしまってすまん。
0876デフォルトの名無しさん
2007/07/12(木) 12:32:27小数点の書式が#0.###で
現在はこのようにしています。
^[0-9]{1,2}[[\\.][0-9]{0,1}[0-9]{0,2}]?$
これだと1や11のように二桁の数字も弾いてしまいます
二桁以内.三桁以内にするにはどうすればいいでしょうか?
また、01も弾きたいです
よろしくお願いします
0877デフォルトの名無しさん
2007/07/12(木) 12:36:58それはどこの方言ですか
0878デフォルトの名無しさん
2007/07/12(木) 12:53:38すいません忘れてました
XMLとJSPです
0879デフォルトの名無しさん
2007/07/12(木) 13:24:31ただ、01のはじき方がわかりません
0880デフォルトの名無しさん
2007/07/12(木) 13:38:070881デフォルトの名無しさん
2007/07/12(木) 15:03:42おおお、先頭に&で追加したら出来ました
ありがとうございました!
0882デフォルトの名無しさん
2007/07/12(木) 15:25:42010 → 10
00・・・002301 → 2301
というように、数字の頭にある0を削るのはどうすればいいでしょうか?
0883デフォルトの名無しさん
2007/07/12(木) 15:29:490884デフォルトの名無しさん
2007/07/12(木) 15:47:14それだと、
00 → ""
にならないですか?
0885デフォルトの名無しさん
2007/07/12(木) 15:49:560886デフォルトの名無しさん
2007/07/12(木) 16:09:51それだと、010系がうまくいかないような。
0887デフォルトの名無しさん
2007/07/12(木) 16:20:000888デフォルトの名無しさん
2007/07/12(木) 16:20:490889デフォルトの名無しさん
2007/07/12(木) 16:28:31やっぱり、010系が。。。
0890デフォルトの名無しさん
2007/07/12(木) 16:32:40$_ = "010";
s/^0+([1-9]|0$)/\1/;
print; # 10
$_ = "010";
s/^0+([0-9])/\1/;
print; # 10
0891デフォルトの名無しさん
2007/07/12(木) 16:34:400892デフォルトの名無しさん
2007/07/12(木) 17:20:02あれ?
Rubyでやっているのですが、こうなりました。。。
a = "010";
/^0+([1-9]|0$)/ =~ a;
puts $1; # 1
a = "010";
/^0+([0-9])/ =~ a;
puts $1; # 1
0893デフォルトの名無しさん
2007/07/12(木) 17:29:370894デフォルトの名無しさん
2007/07/12(木) 17:31:27了解しました。
置換するメソッドを探してみます。
0895デフォルトの名無しさん
2007/07/12(木) 18:39:220896デフォルトの名無しさん
2007/07/12(木) 20:39:59ある一定の値(15から25)を持ち、かつメス属性を持った実体を過激に痴漢するメソッドです!!!!
0897デフォルトの名無しさん
2007/07/12(木) 21:44:030898デフォルトの名無しさん
2007/07/12(木) 21:58:04(?:0+?)([1-9][0-9]*) → \1
じゃだめなん?
0899デフォルトの名無しさん
2007/07/12(木) 22:03:33^(?:0+)([1-9]+[0-9]*|0)
これでどうだろう
0900デフォルトの名無しさん
2007/07/12(木) 22:04:30^0+([1-9]+[0-9]*|0)
0901デフォルトの名無しさん
2007/07/12(木) 23:01:59わざわざ試作までして頂いたようで申し訳ありません。
>>869-875
質問の趣旨は、要件にあった物ががあれば、ちょっと教えてもらえないか、
という事であって、プログラムを書いて欲しいとまでは思ってませんでした。
自分はスキルが低いので何もお返しができませんし(汗)
今後は、似たような悩みがありそうなサーバ系のスレででも、別のアプローチで
質問してみます。
レスして頂いた方々、ありがとうございました。
0902861=868=901
2007/07/12(木) 23:26:440903デフォルトの名無しさん
2007/07/13(金) 08:35:24gsubという置換メソッドを見つけましたが、その方法だと>>892のやり方でも
いけました。
どもです。
0904デフォルトの名無しさん
2007/07/13(金) 19:08:46BGD/HJL→BGD
/より後ろの文字列を置換で削除(/も含む)したいのですがどういう表記にすればいいんでしょうか?
0905デフォルトの名無しさん
2007/07/13(金) 19:32:02(.*?)/.* を \1 に置換
処理系によっては / は \/ にエスケープ。
0906デフォルトの名無しさん
2007/07/13(金) 19:46:58即レスありがとうございます、置換できました
0907デフォルトの名無しさん
2007/07/13(金) 20:28:460908デフォルトの名無しさん
2007/07/13(金) 21:27:500909デフォルトの名無しさん
2007/07/14(土) 21:38:25作った。
自分のブログに上げたから、ブログ検索で見つけてくれ。
0910デフォルトの名無しさん
2007/07/15(日) 00:12:39「切れる」「切れた」「切れす」「切れてん」「切れ、」にヒットして「切れ〜レス」にヒットしないような正規表現を作ろうと思い、
(?=.*切れ)((?=.*る)|(?=.*た)|(?=.*す)|(?=.*てん)|(?=.*、))^(?!.*レス).*
というのを作ったのですが、これだと「切れ〜〜、」というものまでヒットしてしまって困っています。
「切れ〜〜、」にヒットせずに、「切れ、」にヒットするようにはどうすれば良いのでしょうか?
よろしくお願いします。
0911デフォルトの名無しさん
2007/07/15(日) 00:40:48"切れ([るたす、]|てん)" { printf("hit"); }
"切れ.*レス" { /* ignore */ }
. { /* ignore */ }
0912デフォルトの名無しさん
2007/07/15(日) 01:11:22普通に
切れ(る|た|す|(てん)|、)
でいいだろ。
0913デフォルトの名無しさん
2007/07/15(日) 01:13:42のほうがいいか。
0914デフォルトの名無しさん
2007/07/15(日) 01:16:52それだと 「切れるレス」 が問題になる
0915デフォルトの名無しさん
2007/07/15(日) 02:03:08「切れるレ」とかは?
0916デフォルトの名無しさん
2007/07/15(日) 02:50:06みなさんのお勧めでしょうか??安定して、日本語を正しく処理できるエンジンがいいです。
0917・∀・)っ-○◎●
2007/07/15(日) 03:12:06最近は鬼車じゃないの。
あとはライセンスじゃね?
GPLな正規表現ライブラリ薦められて何も知らずに採用しちゃって・・・
なんてことがあっても誰も責任はとれんよ。
0918デフォルトの名無しさん
2007/07/15(日) 03:13:52文字コードは?Unicode, Shift_JIS?
0919・∀・)っ-○◎●
2007/07/15(日) 03:20:30自分でトークンイテレータを作りこむ人にはアリな選択
0920デフォルトの名無しさん
2007/07/15(日) 03:25:31BREGEXPか鬼車ですか。わかりました。調べてみます。
0921デフォルトの名無しさん
2007/07/15(日) 03:39:48鬼車は置換処理は自分で書かないといけないので注意。
あとは、Bregexp互換で中身は鬼車のbregonig.dllってものもあるけど、
ベータ版のUnicode対応版が出てる。置換もあるけど、まー、ベータ版だから様子見かな。
0922デフォルトの名無しさん
2007/07/15(日) 06:32:38「切れるレス」にヒットしなければいいです。
専ブラJaneのあぼーんで使いたいので、perl互換で作りたいのです。
>>910の正規表現だと、「切れ、」と「切れ〜〜、」のどちらにもヒットしていしまい、この2つを区別したいのです。
例えば「切れないし、」は残したい場合でも、「切れ」と「、」が含まれるのでヒットしてしまうのです。
どうすれば解決できるのでしょうか?よろしくお願いします。
0923922
2007/07/15(日) 06:48:52情報小出しにしてすいませんでした。
0924デフォルトの名無しさん
2007/07/15(日) 06:55:110925デフォルトの名無しさん
2007/07/15(日) 13:17:400926・∀・)っ-○◎●
2007/07/15(日) 13:54:29文字列固定の部分をBoyer-Moore法使って高速化してるからな。
Xpressiveもそうだっけな
0927デフォルトの名無しさん
2007/07/15(日) 14:23:29手元に環境無いから試せないが
/切れ([るたす、]|(てん))(?!レス)/
では、どうか?
0928デフォルトの名無しさん
2007/07/15(日) 19:49:29だめでした。
「切れ、」と「切れ〜〜、」は解決できているのですが、「切れるレス」にもヒットしてしまいました。
0929デフォルトの名無しさん
2007/07/15(日) 20:11:02なぜ無謀にもやろうとする奴が後をたたないのだろうか...
0930デフォルトの名無しさん
2007/07/15(日) 20:18:39で実現すればいいのにねぇ
0931デフォルトの名無しさん
2007/07/15(日) 21:00:59(Janeはどうか知らんが)
0932デフォルトの名無しさん
2007/07/15(日) 22:44:49そもそも Jane の正規表現って、Perl 互換なの?
あと、日本語をちゃんとサポートしてるのか?
Jane で使える正規表現を説明しているページ Plz
0933デフォルトの名無しさん
2007/07/15(日) 23:38:25!(正規表現) で(正規表現)にまっちしない文字列、みたいのが
あってもよさそうなものじゃないかと思うのですが
0934デフォルトの名無しさん
2007/07/15(日) 23:54:22JaneView.txtに
▼01101-040210RC1
▽正規検索ユニットを変更
・これまで使っていたRegExpRから、Windows/IE付属のRegExpオブジェクトに変更
・文法はPerl5互換(これまでと同じ)
・パフォーマンスは純粋な検索部分の速度で約2〜3倍に向上
・以前のユニットに戻すには、「設定」「設定」「その他」の「正規検索にWSHを使う」
をオフにして再起動
・環境の問題でWSHが使えない場合は、初回起動時に警告ダイアログが出て自動でオフに
設定されます(その場合、チェックボックスはグレーアウトされる)
※WSHで問題の報告がなければ、いずれRegExpRを取り除く予定です。
とありました。
日本語は使えてます。
0935デフォルトの名無しさん
2007/07/16(月) 00:01:42まいっちんぐしない文字列を痴漢するときはどうするんだい?
0936デフォルトの名無しさん
2007/07/16(月) 00:18:35入力から遷移先が決まらないものはダメなんじゃねえの
0937デフォルトの名無しさん
2007/07/16(月) 00:38:030938デフォルトの名無しさん
2007/07/16(月) 00:38:19なくても書けるので不要ということだろうな。でも与えられた
正規表現が受理する言語の補集合を受理する正規表現を書くのは
大変なので、そういうシンタックスシュガーがあれば便利かも?
0939デフォルトの名無しさん
2007/07/16(月) 00:47:150940デフォルトの名無しさん
2007/07/16(月) 00:52:00意味がわかりません。
0941デフォルトの名無しさん
2007/07/16(月) 00:58:26自分の無知を偉そうに自慢されても私たちに出来る事は何も有りません
0942デフォルトの名無しさん
2007/07/16(月) 01:03:39確かに
> ・文法はPerl5互換(これまでと同じ)
って書いてあるけど
> Windows/IE付属のRegExpオブジェクトに変更
> ・環境の問題でWSHが使えない場合は
とも書いてあるので、細かいところまで Perl 互換かはちょっと怪しいな。
とりあえず
http://tehen.hp.infoseek.co.jp/abone/abone.html
によると、
/切れ([るたす、]|(てん))[^レ][^ス]/
あたりは動きそう。
(行末とかが "切れる" とかなってるとちょっと不味いかも...。)
0943デフォルトの名無しさん
2007/07/16(月) 01:10:31小難しい単語並べりゃいいってもんじゃないんだよ。
>正規言語の補集合も正規言語だから、!(正規表現)みたいのが
>なくても書けるので不要ということだろうな。
書いてみろ。
この作業が酷く大変なら、そういうシンタクスシュガーが無い理由もわかるだろ。
0944デフォルトの名無しさん
2007/07/16(月) 01:29:250945デフォルトの名無しさん
2007/07/16(月) 01:29:33特定文字列が含まれてるかどうか調べるなら
if( $pero =~ /kari/ ){print "バーロー\n";}
含まれていないことを調べるならその補集合で
if( !($pero =~ /kari/) ){print "ローバー\n";}
ってことを言っただけでしょ?
これだけじゃ超えられない表現もいっぱあるけどさ
0946・∀・)っ-○◎●
2007/07/16(月) 03:13:12実現方法は後察しの通り。
0947デフォルトの名無しさん
2007/07/16(月) 06:55:180948デフォルトの名無しさん
2007/07/16(月) 07:19:420949デフォルトの名無しさん
2007/07/16(月) 09:26:500950・∀・)っ-○◎●
2007/07/16(月) 15:21:250951デフォルトの名無しさん
2007/07/16(月) 22:51:370953・∀・)っ-○◎●
2007/07/17(火) 23:22:460954デフォルトの名無しさん
2007/07/19(木) 00:36:580955デフォルトの名無しさん
2007/07/25(水) 17:23:43FirefoxのSearchBox Syncというアドオンを使っています。
これは検索した文字列を検索ボックスに自動的に挿入させるアドオンです。
これで適用させるサイトを増やしたくて、正規表現を見始めました。
そこで本題なのですが、
^http://www\.amazon\.com?\.?(\w+)?/.*keywords=([^&]+)
と
amazon.*keywords=([^&]+)
では、どちらも検索語句を抽出できますが、どちらの記述の方がスマートな記述なのでしょうか?
なお、最後尾のグループに入る文字列が検索ボックスに挿入されます。
0956デフォルトの名無しさん
2007/07/25(水) 19:08:55例えば下のだとamazon.co.jpのほうもマッチします。
0957デフォルトの名無しさん
2007/07/25(水) 22:10:23上のも co.jp にマッチするというかマッチさせたいという話じゃないのかな?
0958デフォルトの名無しさん
2007/07/25(水) 23:29:47できるGUYいる?
このパターンを
http://jp.youtube.com/watch?v=GUUxY6mJ2es
http://youtube.com/watch?v=GUUxY6mJ2es
http://www.youtube.com/watch?v=GUUxY6mJ2es
こんなかんじ
GUUxY6mJ2es
0959デフォルトの名無しさん
2007/07/25(水) 23:37:41分かったら後は自力で頑張れ
0960デフォルトの名無しさん
2007/07/25(水) 23:39:29レスありがとな!
今「サルでもわかる正規表現」ってサイト読んでるぜ!
0961デフォルトの名無しさん
2007/07/26(木) 10:52:330962デフォルトの名無しさん
2007/07/26(木) 10:58:140963デフォルトの名無しさん
2007/07/26(木) 11:04:53&または行末 という表現はどうかけばいい?
0964デフォルトの名無しさん
2007/07/26(木) 12:02:580965デフォルトの名無しさん
2007/07/26(木) 13:02:34次スレはテンプレに「質問する香具師は実装言語・処理系を言え」を加えて立てといて。
よろしく。
0966デフォルトの名無しさん
2007/07/26(木) 13:23:000967デフォルトの名無しさん
2007/07/26(木) 13:32:330968デフォルトの名無しさん
2007/07/26(木) 13:47:42?=を使えばいいのを忘れてた
0969デフォルトの名無しさん
2007/07/26(木) 22:08:56だとしたら、俺のソフトにも追加してやるか。
0970デフォルトの名無しさん
2007/07/26(木) 22:17:440971デフォルトの名無しさん
2007/07/27(金) 00:28:350972デフォルトの名無しさん
2007/07/27(金) 00:56:370973デフォルトの名無しさん
2007/07/27(金) 09:41:150974デフォルトの名無しさん
2007/07/27(金) 09:59:450975デフォルトの名無しさん
2007/07/27(金) 12:12:380976デフォルトの名無しさん
2007/07/27(金) 21:17:33とりなしてくだせ
0977デフォルトの名無しさん
2007/07/28(土) 14:46:070978デフォルトの名無しさん
2007/07/28(土) 15:38:23できるかもしれないが、まずは >>965 で。
0979977
2007/07/28(土) 15:40:46サクラエディターもしくはEclipseのテキストエディターでできれば、と思います。
0980デフォルトの名無しさん
2007/07/28(土) 15:40:45違う環境だったら死ねと言えば済むこと。
0981デフォルトの名無しさん
2007/07/28(土) 17:49:23死ね
0982デフォルトの名無しさん
2007/07/28(土) 18:22:22死ね
0983デフォルトの名無しさん
2007/07/29(日) 00:19:13まあ、結論だけ言うと出来ないよ。>>977
0984デフォルトの名無しさん
2007/07/29(日) 19:40:11空文字ならnul文字だな。\c@だ。
レス数が950を超えています。1000を超えると書き込みができなくなります。