正規表現 Part5
at TECH
1:デフォルトの名無しさん
08/06/03 22:07:28
正規表現(Regular Expression)スレです。
質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。
前スレ
正規表現 Part4
スレリンク(tech板)
2:デフォルトの名無しさん
08/06/03 22:08:44
◆関連サイト
正規表現メモ
URLリンク(www.kt.rim.or.jp)
Perl正規表現雑技
URLリンク(www.din.or.jp)
Regular Expression(Riue ちゃんの正規表現講座)
URLリンク(www.sixnine.net)
正規表現パズル
URLリンク(oraclesqlpuzzle.hp.infoseek.co.jp)
詳説 正規表現
URLリンク(www.oreilly.co.jp)
正規表現プログラミングFAQ
URLリンク(capslockabcjp.kitunebi.com)
JScript 正規表現の概説
URLリンク(msdn.microsoft.com)
.NET Framework 正規表現言語要素
URLリンク(msdn.microsoft.com)
◆関連スレ
[UNIX板] 正規表現
スレリンク(unix板)
[WebProg] 正規表現道場
スレリンク(php板)
◆前スレ
[1] スレリンク(tech板)
[2] スレリンク(tech板)
[3] スレリンク(tech板)
[4] スレリンク(tech板)
3:デフォルトの名無しさん
08/06/04 04:23:54
[|:;, ]{2}[|!:;.,\]
[\∧∨ヮ]
([w]{5}|[w]{3})
これを一行にまとめるとどういう書き方ができるでしょうか?
4:デフォルトの名無しさん
08/06/04 04:28:50
([|:;, ]{2}[|!:;.,\∧∨ヮ]|[w]{5}|[w]{3})
5:デフォルトの名無しさん
08/06/04 18:10:12
スルーされにくい質問のテンプレと例
●正規表現の使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
6:デフォルトの名無しさん
08/06/05 01:44:43
根性の悪い捻くれた奴が減れば無問題
7:デフォルトの名無しさん
08/06/05 20:10:15
このスレの過去ログ集はないんですか?
8:デフォルトの名無しさん
08/06/05 20:14:17
>>7
>>2
> ◆前スレ
9:7
08/06/06 00:18:32
>>8
ありがとうございます。全部DAT落ちしています。
どこかにHTML化されたものがUPされていませんか?
10:デフォルトの名無しさん
08/06/06 00:19:51
>>9
URLリンク(2ch.tora3.net)
11:デフォルトの名無しさん
08/06/07 01:24:25
ダブルコーテーションで囲まれた部分を検索したいのですが、
囲まれた部分が複数あると全部をまとめて見つけてしまいます。
最初のひとつだけを対象にするにはどう書けば良いでしょうか?
data="あいうえお" name="かきくけこ"
このような文字列の中から
あいうえお
だけを検索したいです。
現在は
reg = New Regex("data=""(?<DATA>.+)""", RegexOptions.Compiled)
というようにしてあります。
これだと、
str = reg.Match(pagedata).Result("${DATA}")
での取得結果が
あいうえお" name="かきくけこ"
になってしまいます。
VB.NETなのですが、宜しくお願いします。
12:デフォルトの名無しさん
08/06/07 02:07:35
>>11
reg = New Regex("data=""(?<DATA>.+?)""", RegexOptions.Compiled)
13:デフォルトの名無しさん
08/06/07 03:05:29
>>12
すごい!出来ました
ありがとう
色々調べたのに全然違ってた^ー^;)
14:デフォルトの名無しさん
08/06/07 04:07:24
"""と3つ続けて書くときもあるんだなぁ
あぼーん対象になってた
15:デフォルトの名無しさん
08/06/12 03:01:13
"foo\"bar"@baz.com
ローカルパートの前後の"だけを除去したいのですがどう書けば良いのでしょうか
preg_replace('/[^\\\]"/', '', $str);
では最初の"が除去されませんでした
16:デフォルトの名無しさん
08/06/12 09:13:54
/^"|"@/ でいいのでは。
メールアドレスに「\で"をエスケープ」なんて仕様あったっけ?
17:デフォルトの名無しさん
08/06/12 09:29:16
おとなしく@で分割して前後削っときなさい
18:15
08/06/12 14:16:47
>16
ローカルパートでスペースや","といった文字を使う場合はダブルクォートで括る必要があるみたいです。
受信したメールで希にそういうものがありました。
>17
おとなしくそんな対応にしましたどうもです
19:デフォルトの名無しさん
08/06/12 16:36:41
>>18
「""で括る」というのはその通りなんだけど、その括られた中で \" と
いう記述のルールはあるの、ということ。
20:デフォルトの名無しさん
08/06/12 17:52:10
>19
URLリンク(www003.upp.so-net.ne.jp)
>もっと面倒なのは、ユーザ名に「"」や「\」が入っている場合です。
>このときは「""」で括っただけではダメだという決まりがあるので、直前に「\」を付けます。
>次は、ユーザ名が「urashima"taro」の場合と、「urashima\taro」の場合です。
To: "urashima\"taro"@example.com
To: "urashima\\taro"@example.com
だそうです。
21:デフォルトの名無しさん
08/06/12 18:23:57
"\""は許されるが、"\\"は許されない
22:デフォルトの名無しさん
08/06/12 18:25:55
>>21
また大嘘を…
23:デフォルトの名無しさん
08/06/12 19:41:30
>>20
ほんとだ、確認してみたらちゃんとそういうルールがあったね。騒がせてごめん。
24:デフォルトの名無しさん
08/06/16 20:51:15
すみません。
sakuraエディタをインストールして
<A href="URLリンク(www.xxx.com)" target="_blank">ABC</A>
を
<A href="URLリンク(www.xxx.com)" target="_blank"
title="URLリンク(www.xxx.com)">ABC</A>
に置き換える方法を探してるんですけど、別所で
・検索文字列に「<(a|A) ([^>]*)href="([^"]+)"」、置換文字列に「<$1 $2href="$3" title="$3"」と入れる
・置換する。
といわれたのを参考に色々試したんですが、全くの無知なもので、ぜんぜん置き換えできないので、
よければ詳しく教えてください。
テキスト内全部置き換えじゃなくて、通常の置き換えみたいに下方向とか指定できれば助かるんですが、
無理ならHTMLから部分的に切り取ってやってみます。
25:デフォルトの名無しさん
08/06/16 21:04:20
正規表現はそれで機能する。実際にsakuraエディタで試した
あとはsakuraエディタの問題だからこれ以上はスレ違い
26:デフォルトの名無しさん
08/06/16 21:14:28
href="([^"]+)"
href="$1" title="$1"
めんどくさいし、これでいいよ
27:デフォルトの名無しさん
08/06/16 21:27:19
すみません。チェックいれたらできました・・・・
失礼しました。
28:デフォルトの名無しさん
08/06/16 21:32:09
ついでに聞きたいんですけど、、
URLにある文字列
たとえば www.abcd などのドメイン名が含まれる場合のみ置き換えて、他のドメインは一切触らないってコマンドも可能ですか?
www.abcd.aa www.abcd.ab とwww.abcdが含まれる物は当然全部置き換えるようにしたいんですけど……
29:デフォルトの名無しさん
08/06/18 17:36:50
href="www\.abcd.*?"
30:28
08/06/19 07:51:48
>29 ありがとうございます。
でもやってみたけど出来ませんでした。()と[]で囲んでみましたが、駄目でした。
>24も私なんですけど、
色々調べてみたんですが、([^"]+)の( )内は$で指定できるってのは分かったんですが、
[^"]+でどうしてurlが指定できてるのか全く理解できません。
とりあえず、以下の置き換え方法が分かれば、知りたいこと全部解決するのですが、
<A href="URLリンク(www.xxx.com)" target="_blank">AA</A>
<A href="URLリンク(www.123.com)" target="_blank">123</A>
<A href="URLリンク(www.xxx.com)" target="_blank">AB</A>
<A href="URLリンク(www.123.com)" target="_blank">123</A>
<A href="URLリンク(www.xxx.com)" target="_blank">BC</A>
上記URLが並んでいたとして、以下のように置き換え。
<A href="URLリンク(www.xxx.com)" target="_blank" title="AA URLリンク(www.xxx.com)">AA</A>
<A href="URLリンク(www.123.com)" target="_blank">123</A>
<A href="URLリンク(www.xxx.com)" target="_blank" title="AB URLリンク(www.xxx.com)">AB</A>
<A href="URLリンク(www.123.com)" target="_blank" title="123_b.html">123</A>
<A href="URLリンク(www.xxx.com)" target="_blank" title="BC (URLリンク(www.xxx.com))">BC</A>
4と5行目は可能ならって感じですが、これ全部分かれば今後の応用もアレンジできそうなので。
>24が解決すれば全部自分で出来そうだと思ってましたが、甘かったです。
図々しいですが、分かる方いましたら教えてください。
31:デフォルトの名無しさん
08/06/19 09:27:36
ここまでくると、エディタの置換一発って訳にはいかないだろう。
perlとかrubyとか、正規表現とテキストの扱いに長けたスクリプト言語を使うとか、
エディタの置換でも、一発で全て解決しようとせずに
多段階で置換するとか、目的の物を他と区別出来る一旦違う形に変換するとか、
そういう工夫が要る。
個人的には、数が多くて今後もまたやる作業なら、何らかの言語を使う。
32:デフォルトの名無しさん
08/06/19 09:43:42
出来ないことはないだろうけど、タグが厄介なんだよな。
正規表現マッチングする前にHTMLパーサーとか使って処理したい。
33:デフォルトの名無しさん
08/06/19 09:56:48
パズル的な楽しさを追求するならいいけど、
実用だったら早々に見切りを付けるのも肝心だよね。
複雑な正規表現は、後で手直しするのも面倒だし。
34:30
08/06/19 11:32:57
ありがとう御座います。
では、これだけでも無理でしょうか?
<A href="URLリンク(www.xxx.com)" target="_blank">AA</A>
<A href="URLリンク(www.123.com)" target="_blank">123</A>
<A href="URLリンク(www.xxx.com)" target="_blank">AB</A>
上記URLが並んでいたとして、以下のように置き換え。
<A href="URLリンク(www.xxx.com)" target="_blank" title="URLリンク(www.xxx.com)">AA</A>
<A href="URLリンク(www.123.com)" target="_blank">123</A>
<A href="URLリンク(www.xxx.com)" target="_blank" title="URLリンク(www.xxx.com)">AB</A>
29さんのでは理解できなかったので、要するに、1行目と3行目は24の方法で出来てるので、
24の方法に「この部分がマッチした場合のみ置き換え」って感じで加工したいのですが、
([^"]+)の( )内を弄ればいいんでしょうけどやってみましたが、検索できなくなってしまいます。
35:デフォルトの名無しさん
08/06/19 12:09:29
>>34
暇なので書いてみた。Pythonだけど、出来合いのHTMLパーサは使ってない。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
>>30のようなことをやりたければ、ツリーパーサがないと面倒だな。
36:34
08/06/19 12:35:03
こんなに複雑なこと頼んでたんですか……
置き換えで出来ると思ったけど甘かったんですね。
使い方調べてやってみます。
ありがとう御座いました。
37:34
08/06/19 12:58:55
すみません。
何かソフト必要なんでしょうか?Windows使用です。
最後の("URLリンク(www.xxx.com)<)
Blenderで3Dメッシュ加工したことはありますが、関係ないですよね・・
38:デフォルトの名無しさん
08/06/19 13:37:21
えーと
pythonのスクリプトだから、pythonがインストールされていなければダメだよ
foo.pyという名前で保存したとすると
python foo.py <hoge.html
のようにして標準入力から食わせてやるとよい
39:デフォルトの名無しさん
08/06/19 13:54:59
perl だとこんな具合
$htm = <<_EOF;
<A href="URLリンク(www.xxx.com)" target="_blank">AA</A>
<A href="URLリンク(www.123.com)" target="_blank">123</A>
<A href="URLリンク(www.xxx.com)" target="_blank">AB</A>
<A href="URLリンク(www.123.com)" target="_blank">123</A>
<A href="URLリンク(www.xxx.com)" target="_blank">BC</A>
_EOF
$htm =~ s/<(a href=)"(http:\/\/www.xxx.com\/[^"]+)"([^>]*)>(.*?)(<\/a>)/<$1$2$3 title="$4 $2">$4$5/ig;
print '-'x78,"\n";
print $htm;
print '-'x78,"\n";
実行結果
------------------------------------------------------------------------------
<A href=URLリンク(www.xxx.com) target="_blank" title="AA URLリンク(www.xxx.com)">AA</A>
<A href="URLリンク(www.123.com)" target="_blank">123</A>
<A href=URLリンク(www.xxx.com) target="_blank" title="AB URLリンク(www.xxx.com)">AB</A>
<A href="URLリンク(www.123.com)" target="_blank">123</A>
<A href=URLリンク(www.xxx.com) target="_blank" title="BC URLリンク(www.xxx.com)">BC</A>
------------------------------------------------------------------------------
40:デフォルトの名無しさん
08/06/19 14:04:24
anchor以外の任意のインライン要素が
anchorの子要素になり得るので注意
41:デフォルトの名無しさん
08/06/19 14:30:04
えっと
anchorとか
foo.pyとか全く理解できないんですが、
いまここから
URLリンク(www.activestate.com)
ActivePerl 5.10.0.1003 for Windows (x86)をダウンロードしてインストールしてみました。
42:デフォルトの名無しさん
08/06/19 14:36:55
なぜPerlを…Pythonってwindows用のバイナリないの?
43:デフォルトの名無しさん
08/06/19 14:39:39
ActivePythonというのがあるし
自分でコンパイルもできるよ
44:デフォルトの名無しさん
08/06/19 14:39:56
同じとこにあるよ。ActivePython
45:デフォルトの名無しさん
08/06/19 14:43:45
あのー全く無知なもんで、scriptと言えばwebのjavascriptと cgiscriptしか分からないのですが、
やりたいのは、sakuraエディタで今開いてるabc.txtの置き換えです。
35サンと39さんが同じ人かは分かりませんが、39さんの手法が分かりやすそうなんで、
別の人だったら35さんには悪いですが、pealって書いてあるから
必要だと思ってインストールしてみたんですが、動かし方がよく分かりません。;;
46:デフォルトの名無しさん
08/06/19 14:45:23
あ、あったんで、今ActivePython落としてます。
47:デフォルトの名無しさん
08/06/19 14:52:11
wxPython2.8-win32-unicode-2.8.7.1-py25.exe
を落としてインストールしました。
前にBlender弄ったときに入れた気もしますが。
48:デフォルトの名無しさん
08/06/19 15:00:31
Python Shellを起動してabc.txtを開いてみたんですが、これにどうにかしてupしてもらったtxtの内容を使えばいいのかな?
49:デフォルトの名無しさん
08/06/19 16:13:44
ここは君の作業ログじゃないから、
試行錯誤して困ったらまたおいで。
50:48
08/06/19 18:41:53
最終的に
python234jp-20040927
をインストールして、helpファイルずっと見てるんですが、さっぱり理解できません;;
pythonについては別板で聞いたほうがいいんですかね?
51:39
08/06/19 19:14:10
# unko.pl
# ActivePerl で動作確認済
# つかいかた...コマンドプロンプトで C> unko.pl abc.txt
open FILE, '<', $ARGV[0];
read FILE, $htm, -s FILE;
close FILE;
$htm =~ s/<(a href=)"(http:\/\/www.xxx.com\/[^"]+)"([^>]*)>(.*?)(<\/a>)/<$1$2$3 title="$4 $2">$4$5/ig;
print $htm;
52:デフォルトの名無しさん
08/06/19 20:30:01
やっぱり別の人だったんですね。
とりあえず、>51の4行目以下をテキストにコピーして、unko.plで保存。
cmd.exeと同じディレクトリにabc.txtとunko.plをおいて試しましたが、駄目でした。
処理が始まって、終わったあとabc.txt見ても内容変化してないです。
原因は、www.xxx.com/abc.def?ghi=xyz.とかになってるとして、?とか=の文字が原因になってるとかありませんか?
それか、_blank">ここが日本語になってる</a>のが原因とか・・・
pythonのほうも弄ってますが、まだわかりません。
53:デフォルトの名無しさん
08/06/19 22:13:56
JScript 5.6(WSH)で行先頭の数式を検索したいのですが、
単体の数字や何故か英単語まで反応してしまって困っています。
要するに数値といずれかの演算子を含むパターンが組めればよいのですが、正規表現に馴れておらずうまくいきません。
問題なく検索可能なパターンを教えていただけないでしょうか?
「50+2*2 付随テキスト」にはマッチする。
「50 付随テキスト」にはマッチしない。
現在問題の出ているパターン
new RegExp("^([\d\+\-d\*\/\(\)r@]+)[ | ]*(.*)", "i") //d, r, z ,@は演算子としてそれ以降の処理で使用しています
54:デフォルトの名無しさん
08/06/19 23:35:08
>>53
とりあえずヒントとしては、
●JavaScriptの文字列定数内では \ がエスケープ文字
●[演算子じゃない文字]([演算子][演算子じゃない文字])+
55:デフォルトの名無しさん
08/06/19 23:36:33
●[演算子じゃない文字]+([演算子][演算子じゃない文字]+)+
に訂正。
厳密じゃないけどね。
56:53
08/06/20 00:23:42
>>54
うまくいきました。ありがとうございます。
57:デフォルトの名無しさん
08/06/20 00:51:11
>>52
おまえなぁ、要求をコロコロ変えるなよ。
あとからあとからチビチビ仕様を変更せずに、最初にキッチリ書いとけよ。
58:デフォルトの名無しさん
08/06/20 01:01:11
>>52
わかったかった。「置き換える」の意味が、やっとわかったよ。
ここは正規表現スレなんで、置換の事だと勘違いしてた。
unko.pl は画面に表示するだけだ。
置き換えしたければ abc.txt を open して print 文で $htm を書き出せ。
59:デフォルトの名無しさん
08/06/20 06:58:38
入力が決まらないのに正規表現を書くなんて徒労もいいとこだお
60:デフォルトの名無しさん
08/06/20 07:40:45
51で問題ありませんでした。
私のやり方が間違ってたようです。
お二人には感謝してます。
プログラムの面白さが分かったような気がするので、これを機に少しずつ勉強初めてみます。
最初はやっぱりcgiとかがいいんでしょうか?
web関係で役立つスキルが欲しいのですが・・・・
61:デフォルトの名無しさん
08/06/20 10:21:09
>>60
お手軽さならJavaScriptかな。
ローカルでも実行可能だし、正規表現も扱えるし、ページを動的加工して遊べるし。
62:デフォルトの七資産
08/06/20 16:04:20
都道府県名からの住所を一行で入力する
**県※※郡○○市●●-●●
この文字列を
都道府県名、郡名、市区町村名、その他に分けるときの正規表現はどうしたらいいのでしょう?
※「村山市」や「四日市市」など市区町村名に「市区町村」の四文字が入ったものは考えないものとします。
言語はPHPです。
63:デフォルトの名無しさん
08/06/20 18:11:47
>>62
自分でどこまで書いてみた?
64:デフォルトの名無しさん
08/06/20 19:23:36
PHPの文法は知らないけど、単純に考えると
/([^県]+県)([^郡]+郡)([^市]+市)(.*)/で、$1〜$4かなぁ。
郡って必ず付くのかな。
65:デフォルトの名無しさん
08/06/20 20:41:43
/([^県]+県|[^道]+道|[^府]+府)([^郡]+郡|[^市]+市)(.*)/ の方が良くないかな。
66:デフォルトの名無しさん
08/06/20 23:59:54
明治以降、郡に属している市はない
67:デフォルトの名無しさん
08/06/23 22:05:00
書き込ませて頂きます。
Adobe Goliveの置換機能で、正規表現の奥深さを
知りました。
<!-- start -->
<div class="menu">
<ul>
<li></li>
<li></li>
<li></li>
</ul>
</div>
<!-- end -->
これの<!-- start -->から<!-- end -->までを選択したいとき、
<!-- start -->\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*<!-- end -->とすると
選択はできました。
しかし\nや.*がたくさん出てきてしまい、困っています。
もう少し簡素化できないでしょうか?
ご教授お願いします。<(__)>
68:デフォルトの名無しさん
08/06/23 22:27:03
Goliveさんの仕様は知らんけど、.が改行を含まない仕様なのかな?
<!-- start -->(\n|.)*<!-- end -->
こんな感じ?
69:デフォルトの名無しさん
08/06/24 02:17:47
>>67
mオプションとか
マルチラインモードとか
そういう機能はない?
70:67
08/06/24 06:16:41
>>68さん
まさしくそれです!検証したところバッチリ動作しました。
これで管理が楽になると思います。
ありがとうございます(^^)
>>69さん
mオプション、マルチラインモード等の語句でググってきました。
残念ながら今の自分の頭では理解しきれず、その機能があるかどうか不明
です...(ノД`)・゜・。ゴメンナサイ,モット勉強シテキマス
また行き詰まったとき、来させて頂きます。
教えて頂いた方々、本当にありがとうございました。
71:デフォルトの名無しさん
08/06/25 16:48:01
正規表現ほとんど触ったことなかったんですが、
1文字以上で特定の文字(チェックしたいのは [ と ] )を含まないってどう書くんでしょうか?
72:デフォルトの名無しさん
08/06/25 17:43:46
>>71
>>2 に書いてあるよ。それ読んでもわからなかったら、また質問しにおいで。
73:71
08/06/27 15:05:09
なかなか難しい。
C#で試しに'A'がある文字列をはじくように書いてみましたがうまく
動きませんでした。
string pat = @"^(?!A)*$";
bool result;
result = Regex.IsMatch( "あいうえお", pat );
result = Regex.IsMatch( "あいうAえお", pat );
pat を @"^[^A]*$"
にしてみたらうまく動いたけど、なんで最初の条件で動かないんでしょうか・・。
74:デフォルトの名無しさん
08/06/27 15:29:12
> string pat = @"^(?!A)*$";
.netの正規表現には詳しくないんだけど、一般的な解釈で考えるとこれ
はパターンの文法エラーになってもおかしくないよ。ふつうは先読みや
後読みに繰り返し(+ * {n,m})は付けられない。先読みや後読みは文字を
消費しないので、繰り返しても意味がない。
75:デフォルトの名無しさん
08/06/27 17:08:29
なるほど。使えない組合せもあるのか〜。
ありがとう。
76:デフォルトの名無しさん
08/06/29 19:41:44
これとほぼ同じ性能のやつを作りたいのですが、どんな言語と知識が必要ですか?
当方はhtmlまでしか理解できてません。
スタイルシートの理解度は10%程度です。
たまに、メモ帳の置き換えで正規表現を使うぐらいです。
URLリンク(www.ahref.org)
多少アレンジするつもりですが、最低限必要なことが知りたいです。
77:デフォルトの名無しさん
08/06/29 20:06:25
* HTML。特にフォーム
* CGIの基礎。フォームから受け取った入力にどうやってアクセスするか
* スクリプト言語。Perl, PHP, Python, Rubyのうち好きなのをどれか
あとはHTMLからリンクを抽出する方法でぐぐれば
各スクリプト言語用のサンプルがいくらでも出てくるからそれを使えばOK
これ以降は正規表現云々よりCGIの話だからそっちいって聞いておいで
78:デフォルトの名無しさん
08/06/29 23:09:48
Javascriptだけで十分じゃ?
79:77
08/06/29 23:16:42
あ、その通りだ。ごめんね
80:デフォルトの名無しさん
08/07/01 00:04:06
「アルファベット {a,b,c} 上で a の数が偶数の文字列を表す正規表現」を書
きたいんですが、状態が 8 つ、受理状態が 4 つの状態遷移図は書けるものの、
これをどうやって正規表現に落とせばいいかわかりません。。。
状態遷移図を正規表現にするときのコツみたいのってありますか?
81:デフォルトの名無しさん
08/07/01 00:47:10
/([^a]*a[^a]*a[^a]*)*/
82:デフォルトの名無しさん
08/07/01 05:16:53
>80
URLリンク(oraclesqlpuzzle.hp.infoseek.co.jp)
83:デフォルトの名無しさん
08/07/08 16:34:43
10-20など、正数-正数という入力をし
ある文字列に10〜20などが入っていた場合にはその文字列を表示しようとしているのですが
自分ではスマートなやり方が思いつかなかったので
まず数字-数字に対して([0-9]{1,2})-([0-9]{1,2})とヒットさせ
前括弧をprematch
後括弧をaftmatchとして
for(int i=prematch; i<=aftmatch;i++)
と回して
10|11|12|...|20
と力技で置換し
それを文字列に対して正規表現でマッチさせています
何か良いスマートな方法はありませんか。
84:デフォルトの名無しさん
08/07/08 16:41:04
なんでなんでも正規表現を使いたがるの?
/\d+/抜き出して[10,20]かどうか判断すればいいじゃん。
85:デフォルトの名無しさん
08/07/08 17:09:46
>>84
なるほど
検索文字列をどうにかするのではなく
被検索文字列から数字のみを抜き出せばいいんですね
その方法を少し変え別の部分にも適応すると
その部分も解決しそうです
ありがとうございました
#[xx,yy]という表現を知らなかったから勉強し直そう…
86:デフォルトの名無しさん
08/07/08 17:14:49
>>83
中身に関係ないけど、
pre <-> post
before <-> after
じゃないのか。
87:デフォルトの名無しさん
08/07/08 18:01:54
>>86
postなんて表現があったんですね
直しました、有難うございます
88:デフォルトの名無しさん
08/07/08 22:40:23
//A //BBBB //C //DD
//E //FF //G
//H //I
//J
上のデータで以下の塊で取り出したいのですが
//A //BBBB //C //DD
//E //FF //G
//H //I
//J
どのような表現をとればよいでしょうか
環境はjavaです
89:88
08/07/08 22:45:31
>>88です
自己解決しました。
90:デフォルトの名無しさん
08/07/12 14:15:00
前まで動いていたコードが正しい動作をしなくなったので
相談させて下さい。
\d{2}.\d{2}.\d{2}
で、年.月.日の一番新しいファイルを取ってきていたのですが
何故か2月分のファイルを取ってくる様になりました。
1月〜今月までのファイルは有るのですが、コードを打ち込みなおしても
直りませんでした。
対処法などが有ればご教授ください。
91:デフォルトの名無しさん
08/07/12 14:22:55
>>90
抽出元のフォーマットはどんな感じになってるんだ
92:デフォルトの名無しさん
08/07/13 08:23:29
>>91 レス有難う御座います。
hoge08.01.01.xls 〜 hoge08.07.13.xlsと言う感じなのですが
何か心当たりは有りますでしょうか?
93:デフォルトの名無しさん
08/07/13 08:37:28
その二月分のファイル名と \d{2}.\d{2}.\d{2} はマッチするかとか試してみた?
とりあえず . はドットそのものじゃなくて任意の一文字を表す
ドットそのものは \. ね
94:デフォルトの名無しさん
08/07/13 10:26:29
こんな感じで正規表現の事例集とかもっといっぱいない?
URLリンク(homepage.mac.com)
95:デフォルトの名無しさん
08/07/13 11:50:24
>>93 早いレス助かります。
hoge08.02.14.xls辺りを優先でマッチしてしまう様だったので
\d{2}.07.\d{2}に変更すると、今月内の最新のを優先で当たります。
>\.についても気になったので、直したのですが動作的には
変りませんでした。
96:デフォルトの名無しさん
08/07/13 12:47:05
それは正規表現の問題じゃないと思うよ
97:デフォルトの名無しさん
08/07/13 14:58:19
>>96
何か正規表現で一番最優先でマッチしてくるものとかが有るのかな?
と思ってみたのですが、以前は正常に稼動していたので
サーバで異常な動作なのかな・・・。
大変有難う御座いました。
98:デフォルトの名無しさん
08/07/13 17:05:51
>>97
技術屋なら
擬似的にでも似たような環境を作ってテストしてみるのがいい
99:デフォルトの名無しさん
08/07/13 17:37:58
>>97
正規表現がやるのは「マッチ擦る/しない」だけで、
優先順位とかは検索処理側かと。
100:デフォルトの名無しさん
08/07/13 22:37:09
\d{2}.\d{2}.\d{2} を誰かがいじったか何かで
\d{2}.\d2.\d{2} こうなってしまってるとか???
101:デフォルトの名無しさん
08/07/14 12:21:51
単に、ディレクトリ内でのファイル配置が変わっただけじゃないのか?
例えば、今までは単純増加だったところに何らかの理由で2月のデータを更新して配置が変わってしまったとか。
いずれにしても、検索処理側の問題だな。
102:デフォルトの名無しさん
08/07/14 12:37:08
すいません、ある条件にマッチした書き込みとそのレスのみを抽出できる正規表現を
探しているのですが、可能でしょうか?よろしくお願いします。
103:デフォルトの名無しさん
08/07/14 12:47:55
>>102
>5
104:デフォルトの名無しさん
08/07/14 13:09:50
janeを使用しております。
「12345」や「67890」の様に5桁の数字を含む書き込みとそれに関連するレスを表示したい、
と言うわけです。レス抽出オプションの関連レスを含めるを使用しない形でと思いましたのでよろしくお願いします。
105:デフォルトの名無しさん
08/07/14 13:28:55
素朴な疑問だが、janeのレス抽出って正規表現使えたか?
つーか、janeと言われても派生が多くてどれのことだか判らんが。
106:デフォルトの名無しさん
08/07/14 13:31:04
何度もすいません。JaneDoeViewを使っています。
ちなみに他の正規表現は使用できています。
107:デフォルトの名無しさん
08/07/14 13:42:47
janeDoeViewは知らんが、[0-9][0-9][0-9][0-9][0-9]じゃいかんの?
108:デフォルトの名無しさん
08/07/14 13:53:29
>>107
ありがとうございます。でもそれだと5桁の数字の書かれている書き込みのみの表示となってしまい
それに関連するレスが表示できないところで悩んでいます…
109:デフォルトの名無しさん
08/07/14 13:55:17
それはJane側が対応してないとどうしようもないのでは。
110:デフォルトの名無しさん
08/07/14 13:58:34
やっぱりそうですか。何度も有難うございました。
111:デフォルトの名無しさん
08/07/14 14:01:00
週末の奴といい、janeの奴といい、正規表現を魔法か何かと勘違いしているんじゃないか?
112:デフォルトの名無しさん
08/07/14 14:09:46
追い討ちをかけるようだが
そもそもViewスレで質問する内容だと思うんだが
一つ前のレスで>5へのリンクが貼ってあるにも関わらず読まずに
使用環境書かないし
113:デフォルトの名無しさん
08/07/14 14:53:41
正規表現は呪いであって魔法ではないの。
114:デフォルトの名無しさん
08/07/15 21:50:07
>>99-101
返信有難う御座います。
正規表現部分のソースコードは睨めっこしても問題無さそう
なので、なんだか不明です。
いちご2008.01.01〜
みかん2008.01.01〜
みたいに取得するファイルは沢山有って、例えばいちごだけが
2月のファイルを取ってくるって動作になっちゃってます。
ディレクトリやファイルネームの間違えも確認しましたが・・・orz
とりあえず、\d{2}.07.\d{2}の回避方法で運用でカバーすることにしました。
サーバは怖くてリブート出来ないので・・・。有難う御座いました!
115:デフォルトの名無しさん
08/07/16 00:44:39
>>114
正規表現とヒットする順序には何ら関連がないことは理解できたの?
116:デフォルトの名無しさん
08/07/16 01:32:20
すいません、渋谷駅前を歩いている通行人で処女の女性のみを抽出したいんですが
そういう事って可能でしょうか?よろしくお願いします。
117:デフォルトの名無しさん
08/07/16 03:04:17
>>116
どう見ても小学生くらいに見えるのなら、先ず大丈夫でしょう。
118:デフォルトの名無しさん
08/07/16 03:50:00
>>117
取りこぼしがあっちゃいけないと思うが…
119:デフォルトの名無しさん
08/07/16 08:15:27
>>118
それでは先ず、「処女」の定義をはっきりさせてください。
定義がはっきりしたら、対処してご覧に入れます。
120:デフォルトの名無しさん
08/07/16 08:44:04
週刊宝石かよ。
121:デフォルトの名無しさん
08/07/16 15:30:43
(?<!非)処女
122:デフォルトの名無しさん
08/07/17 18:29:00
{{ABC}}こんちわ{{XYZ}}
これの{{ABC}}と{{XYZ}}にマッチさせる表現を教えて下さい。
{{.*}}だと全体がマッチしちゃって・・・お願いします。
123:デフォルトの名無しさん
08/07/17 18:30:38
おまいの正規表現エンジンの非欲張り型マッチについて調べれ
124:デフォルトの名無しさん
08/07/17 18:59:17
{{{ABC}}} の場合はどこまでマッチしたいんだろうとか思うが、
とりあえず {{[^}]*}} でもいいかもねー。
125:122
08/07/17 19:10:27
>>123
ヒントありがとうございます。
>>124
おおっ!
秀丸の強調表示で使おうと思ってました。
で、自分なりに
{{[a-z^A-Z^0-9^ ^$^/^=^+^%^#^\-^_^!^.^,^&^\(^\)^;^:^\"^\'^\?^亜-K^ァ-ヶ^ぁ-ん^0-9^a-z^A-Z^`]*}}
とかやったらよさげだったんですが、>>124でおkですね
本当にありがとうございました。
126:デフォルトの名無しさん
08/07/17 21:02:42
>>125
頑張りすぎ
127:デフォルトの名無しさん
08/07/18 09:55:24
亜-K ってどういう範囲だっけ?
SJIS?
128:デフォルトの名無しさん
08/07/18 10:28:49
Windows-31Jかな。黒の旧字もあるし。
Unicodeだと破綻しちゃうな。
[:alpha:]みたいな感じで、仮名や漢字を指定する構文があればイイのに。
129:デフォルトの名無しさん
08/07/18 11:13:43
16区から92区までの漢字のようだね
>>128
Unicodeだと、その範囲の漢字はCJK UNIFIED IDEOGRAPHと
CJK COMPATIBILITY IDEOGRAPHに入るんで、Unicodeのカテゴリやブロック名に
対応している正規表現エンジンなら、それを使うのが普通だと思う
そうでないなら、直接コードポイントを用いてU+4E00-U+9FBFとU+F900-U+FAFFで
指定すればいいんじゃないかな
130:デフォルトの名無しさん
08/07/18 13:18:47
Javaだと
[\p{InCJKUnifiedIdeographs}\p{InCJKCompatibilityIdeographs}]
XML Schemaだと
[\p{IsCJKUnifiedIdeographs}\p{IsCJKCompatibilityIdeographs}]
かな。
131:デフォルトの名無しさん
08/07/21 21:01:19
CGIの正規表現で(月)など()の中に曜日があって
曜日を消したかったので
$date =~ s/\([月火水木金土日]\)//g;
というのでやってみたんですができなかったんですが
どうすればいいでしょうか
132:デフォルトの名無しさん
08/07/21 21:05:07
use encoding
133:デフォルトの名無しさん
08/07/21 21:07:47
すみませんsjisです
134:デフォルトの名無しさん
08/07/21 21:30:15
>>133
おそらく perl スレで聞いたほうがいい質問だな。
135:デフォルトの名無しさん
08/07/22 05:04:38
ありがとうございます
perlスレで質問してきます
136:デフォルトの名無しさん
08/07/23 17:27:02
教えてください。テレビ番組の検索で「体操」の番組をすべて検索したいのですが、
そのうち「テレビ体操」「みんなの体操。」を除外するにはどのように書けばいいでしょうか?
137:デフォルトの名無しさん
08/07/23 18:22:34
>>136
>>1 を読んでください。
138:デフォルトの名無しさん
08/07/23 18:53:31
>>137
すみません。これです URLリンク(1st.geocities.jp)
一般的な話でいいので教えていただけると有り難いのですが。
139:デフォルトの名無しさん
08/07/23 19:36:20
含む含まないじゃなくて、完全に一致するのを除外?
^((?!^テレビ体操$|^みんなの体操。$).)*体操.*$
こうかなあ・・・
140:デフォルトの名無しさん
08/07/23 19:39:19
環境によっては、最初の括弧のあとに ?# が必要かも
141:デフォルトの名無しさん
08/07/23 19:40:15
おっと、?: ね
142:デフォルトの名無しさん
08/07/23 21:11:20
(11:22)
このような括弧になっている文字はどうやって指定したらいいんでしょうか?
\([0-9]{1,2}:[0-9]{1,2}\)
こんな感じで試してみたんですがうまくいきませんでした・・・。
143:デフォルトの名無しさん
08/07/23 23:55:13
>>142
「(」とマッチさせたいときに「(」と書くか「\(」と書くか「\\(」と書
くかは環境依存なんだ。というわけで >>1 を読んで。
144:デフォルトの名無しさん
08/07/24 09:05:30
半角スペースを指定する方法ってありませんか?
145:デフォルトの名無しさん
08/07/24 09:45:57
/ /
146:デフォルトの名無しさん
08/07/24 09:46:11
>>144
>>1を100回音読しろ。
147:デフォルトの名無しさん
08/07/24 09:50:39
>>145
/ /
これってどういう指定法なんでしょうか?
148:デフォルトの名無しさん
08/07/24 09:52:30
それでわからんのなら、なおさら自分の環境書けよ
149:デフォルトの名無しさん
08/07/24 10:03:51
ごめんなさい、一から勉強してきます
150:デフォルトの名無しさん
08/07/24 11:32:45
一からじゃねぇよ、零から始めろ。
151:デフォルトの名無しさん
08/07/28 14:13:27
(abc) → abc
([abc]) → abc
[abc(def)hij] → abc(def)hij
[abc(d[ef])hij] → abc(d[ef])hij としたいが、
(ab)(cd) → (ab)(cd) のまま。 ab)(cd にはしたくない。
([abc)] → ([abc)] のまま。abc にはしたくない。
つまり、「文字列両端にあるかっこが、互いに対応する開き・閉じで限りは削除したい」というとき、
perl 5.8.8 の正規表現で書けますか ?
152:デフォルトの名無しさん
08/07/28 14:35:57
(abc) → abc
([abc]) → a-c
[abc(def)hij] → a-f or h-j or ( or )
[abc(d[ef])hij] → a-f or h-j or ( or ) or [ or ]
(ab)(cd) → (ab)(cd)
([abc)] → 構文エラー
(\[abc)]なら動く
153:デフォルトの名無しさん
08/07/28 14:45:11
ああ紛らわしくてすみません、(abc) などは、正規表現ではなく、処理対象の文字列です。
(abc) → abc は、(abc) が入ったとき、それを abc に置換したい、という意味です。
【文字列】 → 文字列
【文字列A】と【文字列B】 → (置換しないでそのまま)
《簡単な【文字列】》 → 簡単な【文字列】
【入れ子の《文字列の【中身】は》そのまま】→入れ子の《文字列の【中身】は》そのまま
【またいでいる《かっこは】そのまま》 →(置換しないでそのまま)
という置換をしたいのです。
154:デフォルトの名無しさん
08/07/28 14:55:46
一番上は\((abc)\)だな
やりたいことは分かったんだが俺には分からないから賢者に任せる
基本外側にある括弧は取り除く
例外として括弧が並んでる or 括弧が入れ子になってる場合は括弧を取り除かない
という感じか
155:デフォルトの名無しさん
08/07/28 15:10:52
>>151
pattern code expression (??{ expr }) を使えば再帰的な正規表現を書くことが出来る。
156:デフォルトの名無しさん
08/08/02 20:51:34
性器表現で痴漢
157:デフォルトの名無しさん
08/08/02 22:50:53
既出
158:デフォルトの名無しさん
08/08/05 04:00:55
毎日毎日、暑い。暑い。暑い。暑い。
物価高で肉が食えないからスタミナ無い。
エアコン代もバカにならない。
しかもCPUは温風を吐き出しまくる!
暑い。あ゛〜〜〜っ!もう我慢ならん!
正規表現でなんとかなりませんかねぇ
159:デフォルトの名無しさん
08/08/05 16:06:39
htmlソースからcharsetの値(UTF-8とか)を取り出すスマートな正規表現は
どんなものがありますか?
160:デフォルトの名無しさん
08/08/05 16:10:35
/\bcharset\s*=\s*("|'|)(.*?)\1/i
161:デフォルトの名無しさん
08/08/05 16:11:33
>>160
仕事速いね!
ありがとうございます
162:デフォルトの名無しさん
08/08/21 14:13:15
/w{4,}|(っ|ぇ)うぇ/
/うは(w|w){2,}|おk(w|w){2,}/
これに類する内容をマッチさせるのにもっとスマートな方法はないものか。。
163:デフォルトの名無しさん
08/08/21 15:06:33
うは[ww]{2,}じゃダメですか
164:デフォルトの名無しさん
08/08/23 06:35:43
無限ループになってしまうような正規表現て書けるんですかね?
165:デフォルトの名無しさん
08/08/23 09:18:49
書けても、それを解釈するエンジン側で、よきにはからう。
っつーか /.*/ でも無限ループとは言える。
循環参照?
166:デフォルトの名無しさん
08/08/24 05:38:57
↓このスレで荒しが酷くてみんな困ってるのですけど
カレー板限定で見えなくする上手い正規表現は無いでしょうか・・・
お前ら、美味しいレトルトカレーを教えれ! 7袋目
スレリンク(curry板)
167:デフォルトの名無しさん
08/08/24 05:42:18
/(!|[ww]|…)/iでNG
168:デフォルトの名無しさん
08/08/24 09:05:20
なんでこうやって荒らし宛てにNGの抜け道を書くんだろうね。
スレリンク(curry板:617番)
正規表現に特定板限定自動荒らし検知機能はないよ。
169:デフォルトの名無しさん
08/08/26 09:20:24
文字列の前後の半角/全角スペースを除去したいのですが、
後ろの部分がうまく除去されません。
^([ ]*)(.*)([ ]*)$
どのようにすればうまく行きますか?
170:デフォルトの名無しさん
08/08/26 10:34:12
真ん中の .* に後ろの全角スペースも含まれるからじゃない?
その記法が使える環境なら、[^ ]* とか?
171:デフォルトの名無しさん
08/08/26 10:34:58
ってこりゃ真ん中の全角スペースで止まるか。
172:デフォルトの名無しさん
08/08/26 10:45:09
*じゃなくて+
173:デフォルトの名無しさん
08/08/26 11:22:09
/^(\s*)(\s*\S*)*(\s*)$/
これで引っ掛けられる?
\sは空白、\Sは非空白ね。
^と$は必要ないかも。
174:デフォルトの名無しさん
08/08/26 12:05:02
Javascriptだけどこんな感じでやってるな
function trim(str){ return str.replace(/^[ \t]+|[ \t]+$/g, ""); }
175:デフォルトの名無しさん
08/08/29 11:48:35
最近は再帰的にマッチできる正規表現が出てきてるんですね
メールのコメントをみんなどうしてるのかずっと悩んでました
176:デフォルトの名無しさん
08/08/30 07:59:25
後方参照は便利だね。
177:デフォルトの名無しさん
08/08/30 10:09:57
>>175
形式言語的な意味で「正規(正則)」な言語ではなくなってるけどね
178:デフォルトの名無しさん
08/08/30 13:12:16
前ってどっちですか?
後ろってどっちですか?
179:デフォルトの名無しさん
08/08/30 15:32:26
あー、あるあるw
プログラムカウンタが進む方(番地が大きい方)が前っぽいのに、
前方参照っつーと番地が若い方だったり。
180:デフォルトの名無しさん
08/08/30 16:19:58
このマップが悪いのかな、マップの赤点が見づらいわ
181:デフォルトの名無しさん
08/08/30 16:20:49
誤爆ね
182:デフォルトの名無しさん
08/08/31 10:38:11
Rubyです
予め文字列を逆にしておき連続する改行の後ろだけにマッチ
/\n(?=(?:\n[^\n]+)+)$/
もっとスマートな方法があれば教えてください
183:デフォルトの名無しさん
08/08/31 11:31:48
連続する改行の後ろだけにマッチ
って事なら、リバースする前に
/[^\n]+\n(?=\n+)/
じゃダメなのかな
184:182
08/08/31 11:58:23
アホだ〜
ここまで解ってるなら逆にする必要なかった
/^((?:[^\n]+\n)+)\n(.*)$/m
これで\1と\2を取り出せば良いんですよね
185:182
08/08/31 12:04:02
>>183
リバース前にそれだと前の改行にマッチしてしまいませんか?
186:デフォルトの名無しさん
08/09/01 08:28:15
最小一致の呪文を覚えた
/\A((?:.+?\n)+?)(?:\n(.*))?\z/m
最終的にこうなりました
正規表現奥が深いです
187:デフォルトの名無しさん
08/09/03 08:43:01
>>84-85
この範囲[x,y]って表現は何のことですか?java/rubyでもないんですけど・・
188:デフォルトの名無しさん
08/09/03 09:08:18
>>187
数学
189:デフォルトの名無しさん
08/09/03 09:09:23
>>187
[文字の範囲] と
{繰り返し回数} を混同してないか?
190:デフォルトの名無しさん
08/09/03 09:15:43
数学。あーそういうことですか。
\\s(\\w)
\\s([\\w])
の違いを調べてるんですが、同じくヒットするんですけど何か違いはあるんでしょうか。
\\w => \wです。
191:デフォルトの名無しさん
08/09/03 09:19:54
ありません
192:デフォルトの名無しさん
08/09/03 09:35:50
あーそーですか。ありがとうございます。
193:デフォルトの名無しさん
08/09/03 09:37:55
数学上の範囲[a,b]は、プログラム的な表現は a..b や (a..b) じゃないですかね?
194:デフォルトの名無しさん
08/09/03 12:48:04
Javaなんですが、強欲な数量子ってのは、欲張り表現ってのでしょうか。
デフォルトでは最長一致なんですが(c+は、c+?ではない方です)、このデフォルト
の挙動 c+ が強欲表現 c++ なんでしょうか?
いまいち c+ と c++ の違いがわからないのですが、何か良いサンプルはないでしょうか。
ちなみに、ネタじゃないですよ
195:デフォルトの名無しさん
08/09/03 13:21:19
>>194
「強欲な数量子」でググれ
"ab" に対して /.+b/ と /.++b/ とか
196:デフォルトの名無しさん
08/09/03 13:29:59
>>194
/c+/と/c++/単独では対した違いはないが、
強欲=「バックトラックしない」だから、後ろに対して影響がある。
たとえば、/c+c/は"ccc"にマッチするが、/c++c/は"ccc"にマッチしない。
197:デフォルトの名無しさん
08/09/03 13:35:38
なんだバックトラックか。
rubyでも廃止予定とか言わず、サポートすればいいのに…
198:デフォルトの名無しさん
08/09/03 14:17:08
c++ってcが2の倍数分だけ得るって事か
199:デフォルトの名無しさん
08/09/03 18:21:05
>>194
c+? : non-greedy (正規表現全体がマッチする範囲で最短)
c+ : greedy "貪欲" (正規表現全体がマッチする範囲で最長)
c++ : possessive "強欲" (正規表現全体がマッチしなくなっても、とにかく最長)
200:デフォルトの名無しさん
08/09/04 00:17:26
丁寧にありがとうございます。
201:デフォルトの名無しさん
08/09/04 00:22:59
rubyの(?> )とほぼ等価ですかね。
イマイチ使う場面に遭遇しないんですけど…
どういう整形に必要かわからないんですけど、パタン表現になるぐらいだから、ある程度は需要があるのかなと思います。
これら特殊表現は、サンプルが多く出てくると、表現を理解できて、使える人がたくさん増えてくるのかなと思います。
202:デフォルトの名無しさん
08/09/04 04:46:06
タグ処理でよくあるんですけど、
<(.+?)>
<(.+)?>
は何か差があるんでしょうか。
203:デフォルトの名無しさん
08/09/04 07:21:56
下は
<> や <abcd>>> みたいなのにもマッチするぞ
204:デフォルトの名無しさん
08/09/04 08:48:19
>>201
正規表現を最適化するのに役立つ。
つまり「バックトラックしても無駄だ」っていうことを表明できる。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4783日前に更新/194 KB
担当:undef