正規表現 Part5at TECH
正規表現 Part5 - 暇つぶし2ch2:デフォルトの名無しさん
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^ ^$^/^=^+^%^#^\-^_^!^.^,^&^\(^\)^;^:^\"^\'^\?^亜-黑^ァ-ヶ^ぁ-ん^0-9^a-z^A-Z^`]*}}
とかやったらよさげだったんですが、>>124でおkですね

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


126:デフォルトの名無しさん
08/07/17 21:02:42
>>125
頑張りすぎ

127:デフォルトの名無しさん
08/07/18 09:55:24
亜-黑 ってどういう範囲だっけ?
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
正規表現を最適化するのに役立つ。
つまり「バックトラックしても無駄だ」っていうことを表明できる。

205:デフォルトの名無しさん
08/09/04 08:53:47
実装はそうでしょうけど、使う方からすると気にしてませんよ。
そもそもそのバックトラックの違いで速度などの差が出るようなら、regexpライブラリ使わないでしょうし。

206:デフォルトの名無しさん
08/09/04 08:54:59
>>205
お前が気にするか気にしないかは問題じゃない

207:デフォルトの名無しさん
08/09/04 09:05:39
おまえが気にするかとかよりも、バックトラックで問題が出るなら一般的には誰も使わないんじゃないですかね?
気にしてるのは、あなたの方ですよw

208:デフォルトの名無しさん
08/09/04 09:13:57
だから俺は気にするといってるんだが…

209:デフォルトの名無しさん
08/09/04 10:46:12
>>203
おお、そんなところに差があったんですか!感謝です!

210:デフォルトの名無しさん
08/09/04 11:01:52
気にするって、まさか自分で実装してるんですか?
c のstring.h程度なら自力で実装できるんですけど・・・

211:デフォルトの名無しさん
08/09/04 11:36:34
正規表現の記事なんだが
やっと読み終わったぜ
URLリンク(codezine.jp)

212:デフォルトの名無しさん
08/09/04 12:02:17
バックトラックの量は正規表現を利用するだけの立場でも気にするべきことですよ。


213:デフォルトの名無しさん
08/09/04 12:05:02
ところでそれ、実測しましたか?

214:デフォルトの名無しさん
08/09/04 12:30:14
$unko =~ m!-_-!m;

215:デフォルトの名無しさん
08/09/04 13:20:26
正直怖いです

216:デフォルトの名無しさん
08/09/15 09:35:05
/\w+/にマッチし
/end/にマッチしない
というのをひとつの正規表現で書くのはどうすればいいですか?


217:デフォルトの名無しさん
08/09/15 10:31:31
否定読み

218:デフォルトの名無しさん
08/09/15 10:37:40
!/\W|end/

勝手に /^\w+$/ だと思い込んでみた。

219:デフォルトの名無しさん
08/09/15 20:23:01
サンクス
!//なんて技があるのか。
でもエディタの設定に//の中だけ書かなきゃいけないから使えないっぽい・・・
\b [^] |を駆使すれば出来そうだがめんどいな。

220:デフォルトの名無しさん
08/09/15 23:02:18
//の中だけじゃ、ignoreとかのフラグはどうしてんの?

221:デフォルトの名無しさん
08/09/15 23:17:10
チェックボックスがあるんだろ

222:デフォルトの名無しさん
08/09/16 00:23:31
○○あいうえお□□123
○○かきくけこ○□345
○○あかさたな□○567
○○はまやらわ□□789
○○あいうえおかきくけこ

このような文字列の○○と□□を入れ替えるには
どうしたらいいのでしょうか?

※○□と□○はそのままにする

223:デフォルトの名無しさん
08/09/16 00:25:51
(○○)(.*)(□□)(.*)
\3\2\1\4

224:デフォルトの名無しさん
08/09/16 00:59:03
素早い返事ありがとうございます。
ただ、それだと2、3、5行目の○○が□□にならないです。

225:デフォルトの名無しさん
08/09/16 01:37:44
s/○○/dummy/;
s/□□/○○/;
s/dummy/□□/;

226:デフォルトの名無しさん
08/09/16 23:29:17
正規表現である文字を含まない行に一致させる方法はありませんでしょうか?

たとえば

あいう
えおか
きくけ

とこのようにあった場合「お」を含まない行「あいう」「きくけ」にマッチさせたいんですが

227:デフォルトの名無しさん
08/09/16 23:52:05
grep -v お n.txt

228:デフォルトの名無しさん
08/09/17 00:47:11
>226
多バイト文字に対応しているとして ^[^お]*$
だけど、大抵の正規表現処理系において >227 のように「マッチしない」を指定する方法があるので
そっちを使う方が賢明。

229:デフォルトの名無しさん
08/09/17 01:15:58
>>227
>>228
レスありがとうございます。
すみません正規表現で文字処理するマクロソフト使用でしたので処理系があまり詳しくあえいませんでした。

^は基本でしたね、無事 ^[^お]*$ ですることが出来ました
ありがとうございます。

230:デフォルトの名無しさん
08/09/17 03:31:00
しかし現行の正規表現って使いづらいよな。
読みにくく書きにくくしかも非力。もう駄目駄目。
2chの面白いレスにのみマッチするといった条件が記述できるくらい強力な
オブジェクト指向か関数型ベースの正規表現を作るべきなんだよ。

231:デフォルトの名無しさん
08/09/17 07:51:36
文字列に対してオブジェクトや関数型ベースってどういう意味?

232:デフォルトの名無しさん
08/09/18 01:50:50
ブラウザによってもjavascriptの動作変わりますよね

javascriptです。
123451234512345

このような文字列があった場合 /1[0-9]*5/g とするとどのようにマッチするかわかりますか?
このようにして使っていたんですが、ブラウザごとに違う動作をするようでうまくいきません。
IEでは12345  12345  12345 と三つにマッチするみたいです。
このような曖昧なものにするとだめなのでしょうか。
対処策などありましたらお願いします。

233:デフォルトの名無しさん
08/09/18 03:36:50
いや、、、どうしたいの?

234:デフォルトの名無しさん
08/09/18 09:17:03
貪欲マッチで「12345」にしかマッチしないのは変だな。

235:デフォルトの名無しさん
08/09/18 09:53:49
Firefoxで以下を実行すると12345123451234にマッチする
javascript:alert("123451234512345".match(/1[0-9]*4/g));
もちろん
1[0-9]*5
に変えると全部にヒット
JavaScriptのエンジンまでとは言わないからせめてブラウザぐらい書いてくれ

236:デフォルトの名無しさん
08/09/18 09:57:10
IEですね、本当にすみませんでした。

237:デフォルトの名無しさん
08/09/18 10:05:11
WinME IE6では123451234512345にマッチした

238:デフォルトの名無しさん
08/09/18 10:40:46
/▶1◀▶[0-9]*◀▶5◀/
"▶1◀▶23451234512345◀"
[0-9]*で残り全部にマッチしちゃって、最後の「5」があぶれそうに思えるけど、
ちゃんと全体にマッチするんだね。自分もまだ修行が足りない。

239:232
08/09/18 12:27:11
IE7でした。IE7でも>>235さんのものを実行したら12345123451234にマッチしますね
正規表現間違っていただけかも・・

「12345」「12345」「12345」
このように3つにマッチさせたいと思ってました。

実際処理していた文字列は長いのですが
.* これを挟んでいたのになぜか
IE7では「12345」「12345」「12345」のように最短マッチのように出ていたみたいです。firefoxでは「123451234512345」

innerHTMLでの処理だったのでIEとfirefoxとでは改行?かなにか、文字列が変わっていたことが原因だったと思われます。

/1[0-9]*?5/gのように?をつけたら同じ動作をするようになりました。
レス下さった方ありがとうございます、勉強になりました。

240:デフォルトの名無しさん
08/09/19 19:54:29
単純な知的好奇心の質問なのですが、
123456789と適当な桁数の数値があった時、先後読みだけで3桁ごとにカンマを挿入するにはどう記述したらいいのでしょうか。

preg_replace("/(?=[0-9]{3})/", ",", "123456789");
では左から3桁以下になるまでカンマが一桁ごとに入ってしまいます。
前後逆転せずにできる方法があればお願いします。

241:デフォルトの名無しさん
08/09/19 20:20:56
>>240
URLリンク(www.din.or.jp)

242:デフォルトの名無しさん
08/09/19 20:25:42
>>240
整数をカンマ区切りに置換
URLリンク(oraclesqlpuzzle.hp.infoseek.co.jp)

243:デフォルトの名無しさん
08/09/19 21:18:24
>>241-242
ありがとうございます。
自分の頭の固さを痛感しました。

{3}+$で右側が3の倍数である時のみ、という風に指定すればいいんですね。
スッキリいたしましたm(_ _)m

244:デフォルトの名無しさん
08/09/20 17:54:15
javascriptで正規表現に%記号がうまく使えません。対処法はありますでしょうか?
/%a/i にすると「%a」にマッチするんですが /%a5/i のように%の後に2文字以上続けるとマッチしなくなります。

エスケープもうまくいきませんでした。宜しくお願いします

245:244
08/09/20 17:56:09
エンコードされた文字列にマッチさせたいと思っています。

246:デフォルトの名無しさん
08/09/20 19:30:20
"\%a5".search(/%a5/i); // => 0

"%a5" という3文字にマッチさせたいんだよね?
0xA5 という文字コードの文字じゃなく。

247:デフォルトの名無しさん
08/09/20 19:57:14
ブラウザとか環境を書けって上でも

248:デフォルトの名無しさん
08/09/21 00:51:45
そうです。文字エンコードされた %82%a0%82%a2%82%a4%82%a6 という文字列の中から特定の文字をマッチさせたいと考えています。

javascript:alert("%82%a0%82%a2%82%a4%82%a6%82%a8%82%a9%82%ab%82%ad%82%af%82%b1".match(/%82%a0/g));
このように実行してもマッチされないんですよね
IEでも狐でもやってみましたがnullになります
どこが間違っているんでしょうか

249:デフォルトの名無しさん
08/09/21 01:03:10
>>248
その式をコピペしたけど、IE8βでもFirefoxでもOperaでもマッチしたぞ。
何かテスト方法を間違えてる。

250:デフォルトの名無しさん
08/09/21 02:59:21
URLリンク(server)<)
 URLリンク(server9.www)<)

よろしくお願いします。

251:デフォルトの名無しさん
08/09/21 03:34:01
少しは自分で調べたり考えたりしたのか?

252:250
08/09/21 03:42:18
>>251
わからないならレスしないでください。
それに質問に質問で返すのは失礼です。

253:デフォルトの名無しさん
08/09/21 04:02:29
あまりにも初歩的だから>>251の気持ちもわかるw

254:250
08/09/21 04:51:58
難しく考え過ぎてた。
風呂入ってきたら自己解決しましま
[|\d]*


255:デフォルトの名無しさん
08/09/21 04:54:57
[| ]
これは必要なのか?

256:デフォルトの名無しさん
08/09/21 12:02:25
練馬というファイル名リネームソフトで正規表現が使えるのですが、

s/\]([^ \.].+)/\] \1/

という正規表現で何故か「従妹」が「従 妹」、「ゾン」が「ゾ ン」という風に
関係ないところまで半角スペースが入ってしまいますが何故でしょうか?

ヘルプを見ると正規表現の仕様は BREGEXP.DLL に準拠すると書かれています
よろしくお願いします

257:デフォルトの名無しさん
08/09/21 13:33:33
そのソフトは知らんが、作者が抜けてるだけだろ。

258:デフォルトの名無しさん
08/09/21 15:52:50
従やゾの2バイト目が SJIS で ] なんだろう。
正規表現ライブラリが日本語対応してないんだろうな。

259:デフォルトの名無しさん
08/09/21 18:45:09
サンクス
他の探すか作者に聞いてみます

260:デフォルトの名無しさん
08/09/21 22:45:57
DLL差し替えればいいじゃない

261:デフォルトの名無しさん
08/09/22 00:13:26
DLL自体は更新止まってるみたいです

262:デフォルトの名無しさん
08/09/22 05:34:17
その練馬とやらを使ってみたし、DLLの説明も見たけど、
SJISとして扱うのには、 k修飾子をつけるyぷになってるんだが
ちゃんとつけてる?

263:デフォルトの名無しさん
08/09/22 05:35:30
って>>256みるとついてないね。つけてやってみては。

264:デフォルトの名無しさん
08/09/22 11:04:27
Visual Basic 2005で正規表現の処理を入れ子にしようとしたんだけど、
これだと、henkanに「$&」が文字列としてそのまま渡されてしまいます。

str = Regex.Replace(str, "<a href="".*?"">", henkan("$&"))

perlのeオプションみたいなのは見つけられなかったのですが、
どうすればいいのでしょう?

265:デフォルトの名無しさん
08/09/22 11:22:09
php5 mb_eregを使用しています。

n個のパターンを後方参照で取得したいです。
例えば 'abcde' を
'([a-z])([a-z])([a-z])([a-z])([a-z])'
というパターンであれば 'a', 'b', 'c', 'd', 'e' ととれるのですが
'([a-z])+'
こんなパターンで取得することは不可能でしょうか?

266:256
08/09/22 17:23:44
>>262
ありがとうございます! /kで問題なくいけました!
ちゃんと説明読んでなかった自分が恥ずかしいです・・・

267:264
08/09/22 18:03:23
自己解決したので、カキコ。

まず、文字列を評価するための宣言をする
Dim myEv As MatchEvaluator = New MatchEvaluator(AddressOf henkan)

んで、置換部分をこんな感じにする。
str = Regex.Replace(str, "<a href="".*?"">", myEv)

さらに、関数をこんな感じに作る。
Public Function henkan(ByVal url As Match) As String
    Dim s As String = url.ToString()
    s = Regex.Replace(s, "\\", "/")
    Return s

End Function

268:デフォルトの名無しさん
08/09/23 18:48:58
>>265
mbじゃないなら
$ php -r 'preg_match_all("([a-z])","abcdef",$reg);print_r($reg);'
でできるんだよな。

でもそれはどうでもいいんだよな。

269:デフォルトの名無しさん
08/09/23 21:44:17
PHPのpreg_matchを使ってHTML文書から次の内容を検索する
正規表現で困っています。

<a href="URL">前のページ</a> <a href="URL">次のページ</a>

ここから「次のページ」を囲んでいるAタグのURLを検索したいです

/<a href=\"(.+?)\">次ページ<\/a>/
これだと、前のページのAタグまで含んでしまい困っています。
最左から検索するのが問題だということまでは分かったのですが解決法が分かりません。

/<a href=\"(.+?)\">(?=次)次ページ<\/a>/
こんな書き方もダメでした。

ヒントでもいいので教えていただけませんか?

270:デフォルトの名無しさん
08/09/24 01:53:37
>>269
> href=\"(.+?)\"

href=\"([^"<>]+?)\"
にでもしたらどーでしょ。


271:デフォルトの名無しさん
08/09/29 06:47:50
始めての…表現
URLリンク(anond.hatelabo.jp)

272:デフォルトの名無しさん
08/09/29 19:04:52
いままでMac OS9 Jeditにて正規表現での置換をしていました.
正規表現での一括置換ができる検索置換ラクダv1.01を導入したのですが
表現方法?Perlでの書き方が違うみたいで上手く置換できません.

できればOS9環境で正規表現の連続置換がしたいので検索置換ラクダで可能な
正規表現をPerl初心者の私にどうかアドバイスというか答えを教えてください・・

「全角文字の前後の半角スペースを削除」例= この MPEG は → このMPEGは 
{[、-◯ぁ-んァ-ヶ亜-腕弌-熙]}\s 【タブ】 \1
\s{[、-◯ぁ-んァ-ヶ亜-腕弌-熙]} 【タブ】 \1

「全角文字の前後の半角カンマを全角カンマへ」例= あ,あ → あ,あ
{[、-◯ぁ-んァ-ヶ亜-腕弌-熙]}, 【タブ】 \1,
, {[、-◯ぁ-んァ-ヶ亜-腕弌-熙]} 【タブ】 ,\1

「行末の西暦を括弧で囲む」例= XX, 2005 → XX(2005) XX,1998 → XX(1998)
, {200[1-9]}$ 【タブ】 (\1)
,{200[1-9]}$ 【タブ】 (\1)
, {19[1-9][1-9]}$  【タブ】 (\1)
,{19[1-9][1-9]}$  【タブ】 (\1)

「半角数字間の全角ピリオドをピリオドを半角ピリオドへ」例= 1.1% → 1.1%
{[0-9]}.{[0-9]} 【タブ】 \1.\2

273:デフォルトの名無しさん
08/09/29 19:13:47
>>272
全角文字を文字範囲で指定するのは、
文字コードに依存するからうまくいかない環境もあると思う。

274:デフォルトの名無しさん
08/09/29 20:05:20
OS9って昔の環境だよな
検索置換ラクダとやらが何だか知らんし
Perlのバージョンも分からんが、
多分、単に漢字を文字クラスの中で使えない可能性が極めて高い

例えば、. が漢字一文字にマッチするか試してみればいいが、
多分そうなっていないだろう

275:デフォルトの名無しさん
08/09/30 09:41:18
php5です


文字列
<tr>
<td colspan="2"><img height="5" src="URLリンク(localhost)" width="1"></td>
</tr>
<tr>
<td width="100" height="147"><a href="/aaaa/bbbb/" title="hogehoge"><img src="URLリンク(localhost)">

この文字列の中のaタグのすぐ後ろのimgタグのURLを取りたく

preg_match("/"<a href=\".*?\" title=\".*?\"><img src=\"(http.*?\.jpg)\">/i", $body, $match);

こうしてみましたが、マッチしません
どのように書けばよろしいでしょうか

276:デフォルトの名無しさん
08/09/30 10:48:28
>>275
imgタグの中で、srcは必ず先頭に来る前提でいいのかな。
/<a[^>]+><img src="([^"]+)/
で、$1を取り出す。

277:デフォルトの名無しさん
08/09/30 11:13:03
空白1つを含む文字列にはマッチするけど、2つ以上連続の空白でマッチしないようにするには
どうすればいいのでしょうか?

ab cd ef  gh

この場合、"ab cd ef"にマッチ。

278:デフォルトの名無しさん
08/09/30 12:13:17
>>277
{1}

279:デフォルトの名無しさん
08/09/30 12:32:32
>>277
[^ ]+( [^ ]+)*

280:デフォルトの名無しさん
08/09/30 12:50:20
>>279
サンクス
うまくいきました

281:デフォルトの名無しさん
08/09/30 16:09:48
>>276
できました
ありがとうございました

282:デフォルトの名無しさん
08/09/30 23:00:39
質問です。

●正規表現の使用環境
サクラエディタ ver.1.6.2.0

●検索か置換か?
検索

●説明
XMLファイルのタグの中を検索したいです

●対象データ
<aaa><bbb>hogehoge</bbb></aaa>

●希望する結果
aaa と bbb と /bbb と /aaa のみ検索される

色分けをしたいのです。
おねがいしまう

283:デフォルトの名無しさん
08/09/30 23:09:21
(?<=<).*?(?=>)

284:デフォルトの名無しさん
08/09/30 23:11:00
しまうーなら答えざるを得ない

285:デフォルトの名無しさん
08/09/30 23:24:06
今回のパナソニックって
s/松下[電器産業]/パナソニック
でいいですか?

286:デフォルトの名無しさん
08/09/30 23:29:57
電波ぽいのが気になるが
s/松下(電器産業)?/パナソニック/ じゃないか

287:デフォルトの名無しさん
08/09/30 23:40:13
>>283
できました。ありがとうございました!




288:デフォルトの名無しさん
08/09/30 23:43:26
そうだw
()はグループ化で
[]は1文字だけか

289:282
08/10/01 00:16:25
やっと理解できたwwwwwwwwww
理解できたってか調べるのに時間かかりました
(?<=<) これで < が前に存在することを保証する
.*? 任意の文字の連続(最短)
(?=>) > が後に続くことを保証する
283は天才www
チラ裏スマソ


290:デフォルトの名無しさん
08/10/01 00:18:33
お礼よりも… 分かってんだろうなボウズ

291:デフォルトの名無しさん
08/10/01 00:19:44
>>290
わかりませんサーセン

292:デフォルトの名無しさん
08/10/01 00:25:56
さっきからチンポ出して待ってんだから… と言えば何か分かるだろ。

293:デフォルトの名無しさん
08/10/01 04:10:07
そういうのりきもいよボケ

294:デフォルトの名無しさん
08/10/01 05:53:23
>>293
お前ここは初めてか?
いいから力抜けよ。

295:デフォルトの名無しさん
08/10/01 07:12:33
>>294
むしろお前が初めてか?
空気嫁よ

296:デフォルトの名無しさん
08/10/01 09:46:51
アッー!

297:デフォルトの名無しさん
08/10/01 10:05:59
最近の腐女子は正規表現も嗜むのか。
時代は進んでるな。

298:デフォルトの名無しさん
08/10/01 11:51:08
PHP4での処理をしております

$str = preg_replace('/(<br \/>|<br>)/i', '<br />', $str);

いろいろやっているうちにチンプンカンプンでしまいには変な顔文字に見えてきて挫折しそうなので
どうかご教授お願いします

やりたい事は$strの中のbrタグが連続して2つ以上あればそれを1つに置き換えたいです
条件として、<br>と<br />を同じ文字列として考えるのと、たまにbrの間に改行コードがあります
<br>\n<br>\n<br /> → <br />
このようにbrタグの間に改行コードがあってもbrタグは連続するものとしたいです
よろしくお願いします



299:デフォルトの名無しさん
08/10/01 12:13:59
php -r '$s="<br>\n<br>\n<br />";echo preg_replace("/((<br>|<br \/>)\n?)+/i", "<br />", $s)."\n";'

300:デフォルトの名無しさん
08/10/01 12:21:01
brタグのすぐ後ろの改行も吸収してしまうが
$s="<br>\n<br><br />\ntest<br>\n\n<br />";
$str = preg_replace("/(<br( +\/)?>\n*)+/i", "<br />", $s);

301:デフォルトの名無しさん
08/10/01 13:19:37
>>299-300
望みどおりの処理ができました
ありがとうございました


302:デフォルトの名無しさん
08/10/03 16:41:07
\d+\.\d+\.\d+\.\d+
でIPアドレスを取得しようとしてますが、
127.0.0.1 にだけはマッチさせたく無いです。
どうやったらいいですか?



303:デフォルトの名無しさん
08/10/03 17:16:01
(((((((((((((((([^1]*)*(1+[^2][^1]*)*)*)*(1+[^7][^1]*)*)*)*(1+[^.][^1]*)*)*)*(1+[^0][^1]*)*)*)*(1+[^.][^1]*)*)*)*(1+[^0][^1]*)*)*)*(1+[^.][^1]*)*)*)*(1+[^1][^1]*)*)*

304:デフォルトの名無しさん
08/10/03 17:16:18
不可能ではないが2段階に分けたら?
なにがなんでもひとつの正規表現でやらなきゃならない?

305:デフォルトの名無しさん
08/10/03 17:18:55
>>303
((((;゚Д゚))))ガクガクブルブル

306:デフォルトの名無しさん
08/10/03 17:23:05
>>303
そんなの死んでもイヤです!

307:デフォルトの名無しさん
08/10/03 17:28:43
まあIPアドレスなら127.まででもいいとは思うけどな。

308:デフォルトの名無しさん
08/10/03 21:02:00
文字列がIPアドレスのみなら

$str="192.168.0.1";
preg_match("/(127\.0\.0\.1)?(.*)/",$str,$m);
echo $m[2];

でいけるよな

309:デフォルトの名無しさん
08/10/03 21:29:36
127…でやってみた?

310:デフォルトの名無しさん
08/10/03 23:16:55
s/127.0.0.1/うんこ/g

/\d+\.\d+\.\d+\.\d+/gp

s/うんこ/127.0.0.1/g


311:デフォルトの名無しさん
08/10/03 23:18:12
>>309
>308の事なら中身の有無で分岐すればおk

312:デフォルトの名無しさん
08/10/03 23:19:03
ドットにエスケープなんているの?

313:デフォルトの名無しさん
08/10/03 23:23:17
可読性

314:デフォルトの名無しさん
08/10/04 00:55:36
ドットってエスケープいらないの?

315:デフォルトの名無しさん
08/10/04 01:04:01
すまない、必要だった
エスケープしないと任意の一文字でしたね

316:デフォルトの名無しさん
08/10/04 01:51:11
VC++でマルチバイト(ユニコードではない)日本語文字列を対象とした正規表現ライブラリの定番は何ですか?

317:デフォルトの名無しさん
08/10/04 09:19:23
Unicodeに変換しちゃだめなの?

318:デフォルトの名無しさん
08/10/04 21:25:17
ユニコード用しかないのか・・・。
VC++でまともな正規表現やろうと思ったら、ユニコード用の正規表現ライブラリしかないんですかね?
VBAのRegExpコントロールとか、boostのregexとか。

いますごく困ってるのは、VBAのRegExpコントロールを使ってVC++でMBCSプログラミングをしてるんですが、
MatchオブジェクトのFirstIndexプロパティが文字数単位で返ってくることなんですよ。
MBCSだと、バイト単位でどの位置なのか知りたいのに。
もちろん対象となるテキストの先頭から2バイト文字かどうかを調べていけば、
何文字目が何バイト目かを調べることはできるけど、テキストが長くなると処理速度的に満足できない。

ユニコードで何文字目→MBCSで何バイト目を高速に計算するAPIってないですか?

319:デフォルトの名無しさん
08/10/04 21:43:13
あと思いつくライブラリは鬼車だけど、どうだろう
何バイト目?ってのは結局頭から見ていくしかないので高速化も難しい
でも長いテキストでも見る開始位置を後ろに持っていくぐらいはできるかな

320:デフォルトの名無しさん
08/10/04 23:14:36
>>319
鬼車というのはちょっと見てみましたが、クセがありそうなのでやめときます。
文字数→バイト変換はやっぱり先頭から真面目にカウントするしかなさそうですね。

過去のカウント結果を保持するような文字数→バイトカウント専用のクラスを作って、
同じテキストに関するカウントの高速化をするとか工夫してみます。

321:デフォルトの名無しさん
08/10/05 10:09:25
MBCSの定番と言えばbregexp.dllじゃね?あるいは鬼車を同じIFにしたbregonig.dllとか。
鬼車以上にクセがあるが。

322:デフォルトの名無しさん
08/10/06 13:33:23
一括置換ソフトを使い、
複数のファイルにて、一括複数行置換をしたく、そのために正規表現を使わなくてはなりません。
色々と試してみてもうまく検索されないので教えてください。

<!--shinobi1-->
<script type="text/javascript" src="URLリンク(x7.shidareyanagi.com)ここに9桁の英数字があります"></script>
<noscript><a href="URLリンク(x7.shidareyanagi.com)ここに9桁の英数字があります" target="_blank">
<img src="URLリンク(x7.shidareyanagi.com)ここに9桁の英数字があります" border="0"></a><br>
<span style="font-size:9px"><img style="margin:0;vertical-align:text-bottom;" src="URLリンク(img.shinobi.jp)" width="19" height="11">
<a href="URLリンク(sbc.rentalurl.net)" target="_blank">美容整形</a></span></noscript>
<!--shinobi2-->

ファイルにより、上記の中で、「ここに9桁の英数字があります」のところがそれぞれ異なります。

その複数ファイルの中で<!--shinobi1-->から<!--shinobi2-->まで囲まれた部分を検索にかける場合、正規表現ではどう書きますでしょうか?

一括置換ソフトは
複数行置換 を使用しております。

323:デフォルトの名無しさん
08/10/06 13:37:08
>>322
<!--shinobi1-->.*<!--shinobi2-->
ではダメなの?



324:デフォルトの名無しさん
08/10/06 13:39:04
<!--shinobi1-->.*<!--shinobi2-->

325:デフォルトの名無しさん
08/10/06 13:57:09
最長一致しちゃうから、.* じゃマズいでしょ。
途中にコメントがないなら、<! を避ければいけそう。

326:デフォルトの名無しさん
08/10/06 19:16:41
.*? でいいんじゃ

327:デフォルトの名無しさん
08/10/06 21:30:13
最短一致で何か問題あるの?

328:デフォルトの名無しさん
08/10/06 21:59:53
だれもそんなことはいってないが

329:デフォルトの名無しさん
08/10/07 08:19:34
正規表現を使わなければならない、って云ってるのに
やり方が分からないってどういう事だ

330:デフォルトの名無しさん
08/10/07 09:48:57
その一括置換ソフトとやらが正規表現を使えるってことじゃ?

331:デフォルトの名無しさん
08/10/07 10:25:20
sedで、

 <a href="http://○○<br><br>○○ target="_blank">△△</a>
 <a href="http://○○○○ target="_blank">△<br><br>△</a>

にマッチングして、<br><br>を削除したいのですがどの様な記述になるのでしょうか。


332:デフォルトの名無しさん
08/10/07 10:28:10
(<br>){2,}

333:デフォルトの名無しさん
08/10/07 10:35:57
追加

 □□<a href="http://○○<br><br>○○ target="_blank">△△</a>□□
 □□<a href="http://○○○○ target="_blank">△<br><br>△</a>□□

失礼しました。<a href=""></a>の前後にも文字列があります。<a href=""></a><a hr・・・と
繰り返している可能性もあり、<a href=""></a>内で<br><br>が発生している時はsedで取り除きたいのです。

334:デフォルトの名無しさん
08/10/07 11:22:35
<a href="">.*?(<br>){2,}.*?</a>

335:デフォルトの名無しさん
08/10/07 11:33:58
>>334
有り難うございます。 <a href=".*?(<br>){2,}.*?</a> と変更しまして、ためしましたと所、

 <a href=""></a>○○<br><br>○○<a href=""></a> 

にもマッチングしてしまいます。

336:デフォルトの名無しさん
08/10/07 14:14:50
/(<a href=.+?>.*?)<br><br>(.*?<\/a>)/$1$2/ でどうだ

337:デフォルトの名無しさん
08/10/07 14:17:50
あ、まちごうた。これでどうだ
/(<a href=.+?)<br><br>(.*?>)/$1$2/
もしくは
/(<a href=[^<>]+?)<br><br>(.*?>)/$1$2/


338:デフォルトの名無しさん
08/10/07 17:13:07
>>337
有り難うございます。
会議が入ったので取り敢えずの中間報告です。どちらも100件の小さいログサンプルでは、
<a href="○○<br><br>○○></a>にはちゃんと働いてくれました。

良い感じだったのですが、<a href="△△">○○<br><br>○○</a>□□<a href="・・・
とリンク文字間に<br><br>が有る場合は反応いたしませんでした。


339:デフォルトの名無しさん
08/10/07 20:37:43
このスレに複数のbrタグを一つにする正規表現があるから
それを活用するといいよ

340:デフォルトの名無しさん
08/10/15 17:14:42
その妙なHTMLを吐き出してる奴を修正する。

341:デフォルトの名無しさん
08/10/17 20:22:59
C#の正規表現で、「スペース(半角、空白)か改行しかない」という
条件はどう表現するのでしょうか。

^\s+\n と ^\s*$ を組み合わせる事で表現出来たような気したんですが
------


a

------
もマッチしてしまいます。

342:デフォルトの名無しさん
08/10/17 20:46:45
空白が何を指すのかちょっとわからないけど
^\s+$ か ^\s*$で通常なら事足りるはず

メソッドの使い方間違えてるかもしれないから
とりあえずC#のコード貼ってみて

343:デフォルトの名無しさん
08/10/17 21:55:13
>>342
親切に有り難う御座います。
^\s+$ で無事マッチさせる事が出来ました。
一応メソッドの方は汚いですが抜粋すると以下の様にして判定しており
buffの中に正規表現が入っていてstTargetを判定している感じです。

for (int i = 0; i < buff.Count; i++)
{
    bool regexCheck;
    try
    {
        regexCheck = Regex.IsMatch(stTarget, buff[i]);
    }
    catch
    {
        return true;
    }
    if (regexCheck == true)
    {
        return true;
    }
}

344:デフォルトの名無しさん
08/10/24 04:23:35
質問に来ました。

●正規表現の使用環境
boost regexを使用した「Flexible Renamer」というファイルリネームソフト

●検索か置換か?
置換

●説明
[aaaa][bbbb].xxx などとなっているファイル名の最初の[]だけを()に変えたい
(aaaa)[bbbb].xxx となるようにしたい

ソフトがバグっている可能性もあるのですが、いろいろやったけどできません。

345:デフォルトの名無しさん
08/10/24 04:28:04
それで質問は?

346:デフォルトの名無しさん
08/10/24 07:52:39
s/^(.*?)\[(.*?)\](.*)$/\1(\2)\3/
できないのはソフトのバグではない
じゃあ何の所為なんだろうね

347:デフォルトの名無しさん
08/10/24 11:11:02
>>346

やっぱりできませんでした
どうもソフト自体が正規表現を受け付けないみたい、説明にもヘルプにもできるって書いてあるのになー
別のフリーソフト探します

348:デフォルトの名無しさん
08/10/24 11:56:11
ちょっと触ってみたけど、高度なりネームにチェック入れたか?

349:デフォルトの名無しさん
08/10/24 12:11:36
高度なリネームにチェックして、正規表現を選択、
検索:^(.*?)\[(.*?)\](.*)$
置換:\1(\2)\3
で動作したが。

350:346
08/10/24 12:18:31
えっ、そこからなの?
ソフトの使い方とか予想外だった

351:デフォルトの名無しさん
08/10/27 09:42:10
HTMLのあるタグの中身が入れ子になっていても確実に外側にマッチできる正規表現ってありませんか?
正規表現だけに頼らず、HTMLをパースするしかないんでしょうか?

<div class="1">
あああ
<div class="2">いいい</div>
</div>
↑この、<div class="2"> があろうとなかろうと、<div class="1"> に対応する</div>までをマッチさせたい

352:デフォルトの名無しさん
08/10/27 10:23:24
たぶん、正規表現マッチのみだと、荷が重いか無理。
その例みたいに、「divのみで2重まで」とか条件があればまだしも。

353:デフォルトの名無しさん
08/10/27 11:17:41
HTMLとかXMLとか扱うのなら、たいていのケースでパーズしたほうが簡単。


354:デフォルトの名無しさん
08/10/27 13:40:07
世の中のHTMLがまともなHTMLばかりなら
それで苦労ないんだけどなw

355:デフォルトの名無しさん
08/10/28 01:02:35
ネストが狂ってたり閉じタグが無かったりなんてのはザラだからなー

356:デフォルトの名無しさん
08/10/28 01:19:07
一つの正規表現では無理だが、ループ作れば何とか。でも、自分では普通かかんよねー。
$match = '';
$str =~ /(<div class="1">)/g or die "no match";
$match .= $1;
while ($str =~ m{\G(.*?</div>)}gs) {
 $match .= $1;
 last if $1 !~ m/<div/;
}

357:デフォルトの名無しさん
08/10/28 11:17:52
現在『[\x20-\x7E]』とやって半角文字を抽出してるんですが
半角の空白のみを含まない場合は、どうやって表現したら良いでしょうか
お願いします。

358:デフォルトの名無しさん
08/10/28 12:25:44
>>357
アスキーコード表を眺めてみましょう。

359:デフォルトの名無しさん
08/10/28 12:38:16
>>358
ありがとうございました『[\x21-\x7E]』でいけました。
ところで、vb2008のRegexクラスでは、^による否定ってできないのでしょうか

360:359
08/10/28 13:01:21
使えることがわかりました。自分の記述が悪かったみたいです。ありがとうございました。

361:デフォルトの名無しさん
08/10/29 18:31:37
C#で

数字4桁で後ろに
何もない
ハイフンが1個
ハイフンと小文字のアルファベットa-z
の3パターンにマッチするには、どう書けばいいのでしょうか


1234
2345-
7896-d



362:デフォルトの名無しさん
08/10/29 19:21:52
>>361
>>2あたりは一通り読んだのか?

363:デフォルトの名無しさん
08/10/29 21:45:54
優しさに泣いた

364:デフォルトの名無しさん
08/10/30 01:04:02
環境)OS:WinXP-Pro,Mem=3GB,開発ソフト:FlashCS3-Pro(Player9.0,AS3.0)

Flash-ActionScript 3.0で正規表現を用いて、テキスト中の
 1.2345
-0.1234
10.5678

といった数値を抽出しようと思いますが、この場合の小数点の扱いはどのようになるのでしょうか?
テストで .[0-9] (小数点とその右の数値を抽出)を行ったところ、e1 というコードが現れ、
全く出鱈目な結果を得ました。
(ActionScript3.0で「.」は任意の1文字なので仕方ないのですが・・・)

Flashの場合に限らず、小数点を含む類似のサンプルがありましたらご紹介下さい。


365:デフォルトの名無しさん
08/10/30 01:07:55
OSとメモリに和んだ

任意の一文字を表す . を \ でエスケープすれば
. そのものになると思うよ

366:364
08/10/30 01:31:46
>>365
早速のレス有難うございます。

たった今、手元の本で見つけたのですが、 . はAsciiコードで \x2E と表現するということなので、
これで試しましたが駄目でした(Unicode表記 \u002E でも駄目でした)

半角マイナス(\x2D)やスラッシュ(\x2F)は問題なく抽出できたのですが・・・


367:デフォルトの名無しさん
08/10/30 02:06:44
正規表現オブジェクトをどうやって作ったのか
そのオブジェクトとどうやってマッチさせたのかわかるコードを貼ってみて

もし前者で new RegExp("\x2E[0-9]") とかしてるとややこしいことになる
正規表現リテラル /\x2E[0-9]/ や /\.\d/ なら期待通りに動くはず

368:デフォルトの名無しさん
08/10/30 02:54:50
[.][0-9]
なんて手もある。
一文字多いけど、 \ の扱いが面倒な状況だと役に立つかも。

369:364
08/10/30 22:42:15
>>367-368
試してみました。コードの構成は以下の通りで、マウスクリックでのアクションです。

var str:String = "+ +-- ** / / 0120-123-456 1.2345 -0.1234 10.5678 0.0012"; //適当な文字列

this.expBtnM0.buttonMode = true;// マウスポインタを指の形に
this.expBtnM0.addEventListener (MouseEvent.CLICK, mcClick0);
// 5個のムービークリップ expBtnM0~expBtnM4 を押して動作

function mcClick0 (event:MouseEvent):void {
var pattern:RegExp = /\x2E[0-9]/g; // <----- ここを5種類で試す
var regObj:Object = pattern.exec(str);
trace ("0 マッチング: " + regObj); // 0 マッチング: ~ 4 マッチング:
trace ("0 文字列: " + str.match(pattern)); // 0 文字列: ~ 4 文字列:
trace ("");
}

結果は、 var pattern:RegExp = /\x2E[0-9]/g; , var pattern:RegExp = /\.\d/g; , 
var pattern = new RegExp("[.][0-9]", "g"); および var pattern:RegExp = /[.][0-9]/g; の4つで可でしたが、
var pattern = new RegExp("\.\d", "g"); ではod が返されて不可でした(odの意味を調べましたが、
分かりませんでした)。
取りあえず、少数点(ドット)には var pattern:RegExp = /~/; の形が良いようです。

アドバイス、有難うございました。

370:デフォルトの名無しさん
08/10/31 01:02:32
今北
最後のやつはダブルクォート中のエスケープだから実態は“.d”で
任意の1文字+dで解釈されたと思われる
それをするなら“\\.\\d”だろうか
どうも「\でエスケープ」の意図が伝わってなかった気がするね
できたんならよしとすればいいけど

371:デフォルトの名無しさん
08/10/31 06:50:23
だね。ややこしいところではある

// ASコンパイラは文字列「ドット、次に d 」と解釈
"\.\d"

// 正規表現コンパイラは文字列「ドット、次に d 」を元に正規表現を作成
// 結果、任意の一文字に続いてdが来る文字列にマッチする正規表現が出来上がる
new RegExp("\.\d", "g");

こういうのにはまったら、ASコンパイラと正規表現コンパイラの二者が
(概念的には)存在することを思い出すといいんじゃないかと思う
もちろん、とりあえず正規表現リテラル /.../ 使っとこう、でも構わない
あと >>369 のコード中の str に文字列 od が含まれていないか確認を

372:364
08/11/01 11:41:13
>>371
すいません、レス遅くなりました。

ここに貼った var str:String は元が長いので、途中を省略したもので、コード上の元の
文字列には確かに od が入っています。
AS3.0の new RegExp("\.\d", "g"); だと、od(~d) が対象になるのかなあ・・・・


373:デフォルトの名無しさん
08/11/03 18:48:42
●正規表現の使用環境
PHP4.3.11

●検索か置換か?
検索

●説明
CSVファイルを「,」で分離したいが、
「"」で囲まれているフィールドに関しては「,」で分離したくない

●対象データ
AB,BC,"CD,DE,EF",FG

●希望する結果
(1)AB
(2)BC
(3)"CD,DE,EF"
(4)FG

すいません、基礎的な質問かと思いますが
お分かりになる方がいらしたらよろしくお願いいたします。

374:デフォルトの名無しさん
08/11/03 19:47:44
CSVの分割は正規表現では完璧に表現できない
プログラムで対処が一般的

375:デフォルトの名無しさん
08/11/03 21:01:42
>>373
PHPなら専用の関数が元からあるだろう?


376:デフォルトの名無しさん
08/11/03 21:31:19
●正規表現の使用環境
Ruby1.8

●検索か置換か?
置換

●説明
ファイル名の頭から指定の文字列Xまでをなくす

●対象データ
例)指定の文字列X → "test"

ドラゴンボールtestあいうえお.txt
あああいいいtest.txt

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

377:デフォルトの名無しさん
08/11/03 21:35:30
"aaaiiitest.txt".sub(/.*?test/, "test")
"aaaiiitest.txt".slice(/test.*/)

378:デフォルトの名無しさん
08/11/03 21:40:12
テラ早い回答ありがとうございました

379:デフォルトの名無しさん
08/11/08 09:49:48
●正規表現の使用環境
Perl v5.8.8

●検索か置換か?
検索

●説明
F1という文字列が含まれていたらヒットさせたい
ただしF1の前にFが付いている場合はヒットさせたくない

●希望する動作
"F1 ほげほげ" →真
"FF11 ほげほげ" →偽


[^F]F1
[^F]?F1
などと試して見ましたが失敗でした

380:デフォルトの名無しさん
08/11/08 10:11:16
自己解決
これでうまくいきました
^F1|[^F]F1

381:デフォルトの名無しさん
08/11/08 14:32:31
否定戻り読みとか使うのもいいだろう。
(?<!F)F1

382:デフォルトの名無しさん
08/11/08 14:36:05
CodeZineの記事オススメだなテンプレにいれとこうぜ

URLリンク(codezine.jp)
URLリンク(codezine.jp)


383:デフォルトの名無しさん
08/11/09 06:56:57
>>381
それは否定先読み

384:デフォルトの名無しさん
08/11/09 07:01:53
これ間違ってる?

(?<=aaa)bbb 直前にaaaがくるbbbにマッチ(先読み)。
(?<!aaa)bbb 直前にaaaがこないbbbにマッチ(否定先読み)。
aaa(?=bbb) 直後にbbbがくるaaaにマッチ(戻り読み)。
aaa(?!bbb) 直後にbbbがこないaaaにマッチ(否定戻り読み)。

385:デフォルトの名無しさん
08/11/09 07:04:38
>>383は無かったことにしてくれ

386:デフォルトの名無しさん
08/11/10 09:18:59
●正規表現の使用環境
lex
●検索か置換か?
検索 ?
●説明
C言語のコメントで使われるような書式の検索
/*で始まり*/で終わるような文
ただし途中で*/は出現しない
漢字コードはEUCです。
コメントが英数字だけならできそうなのですが
漢字などが入ってくるとよくわかりません。
よろしくお願いします。

387:デフォルトの名無しさん
08/11/10 10:47:44
EUCなら、漢字がバラになっても英数字とコードが重複しないから
問題ないのでは?

388:デフォルトの名無しさん
08/11/10 11:20:03
>>387
できれば正規表現を教えてもらえないでしょうか?
英数字は[a-zA-Z0-9]のようにできると思いますが
ひらがなやカタカナは[あ-んア-ン]のようにはやはりできませんよね?
文字コードで書くのでしょうか。。。。

389:デフォルトの名無しさん
08/11/10 11:21:52
>>388
この場合、正規表現にひらがなやカタカナを書く必要ないでしょう?


390:デフォルトの名無しさん
08/11/10 11:40:01
>>389
コメント/**/の中にひらがなやカタカナ、漢字、英数字がでて来ると思うのですが
必要ないのでしょうか?
例として
「/*(A|***B)*/」
Aは「*、/」以外の文字を表しBは「/」以外の文字を表す。
演算の*と混乱をさけるためアスタリスクは全角大文字にしているが
実際は半角にする。
このAとBを表したいのですが。。。。
例えば[0-9a-zA-z(漢字コード?)^/*(/と*を除く)]のようにすればいいのでしょうか?


391:デフォルトの名無しさん
08/11/10 12:15:38
後出しで条件つけるなよ・・・

392:デフォルトの名無しさん
08/11/10 13:04:37
>>390
目的は、コメント中の「*」を「*」にすること?

393:デフォルトの名無しさん
08/11/10 13:19:29
>>391
すみません、質問の仕方が悪かったです;
>>392
いえ、「/*(A|***B)*/」の「*」は本当は「/*(A|xx*B)*/」
とかけてC言語ではかけるの「x」は「*」で、
正規表現の0回以上繰り返す「*」とかぶってしまうため
「/*(A|***B)*/」とかかないで「/*(A|***B)*/」と書いていると思います。
何がしたいのかはlexを使って字句解析をしたいのですが
コメントの部分をスルーするための正規表現の仕方がしりたいのです。

394:デフォルトの名無しさん
08/11/10 13:25:36
字句解析するなら /* と */ だけ検知して
途中は読み飛ばせばいいような気がするんだけど、そうじゃないの?

395:デフォルトの名無しさん
08/11/10 13:29:59
英数字なら出来そうとかのたまっているけど、まずはそれで実装してみりゃいいじゃんね。
それでEUCコードの部分で引っかかるようなら改良すればいい。

396:デフォルトの名無しさん
08/11/10 13:40:59
ダメだこりゃ

397:デフォルトの名無しさん
08/11/10 13:45:57
>>394 が正解。

コードで書くのは簡単なんだが、正規表現にするには独特のコツがいるという
タイプの問題なので、下手にこだわるよりさっくり問題そのものを別の方法で
解決してしまったほうが早い。

398:デフォルトの名無しさん
08/11/10 13:58:13
よく分からんが、最短マッチが使えないからどうしようって話か?
/* -> COMMENT状態に遷移
*/ -> 戻す
でいいんじゃね

399:デフォルトの名無しさん
08/11/10 14:03:53
>>394
/*と*/を検知するには
{^/*}{/*$}のような感じでいいのでしょうか?
行が複数行になったらおかしくなりませんんかね。。。。。

400:デフォルトの名無しさん
08/11/10 14:28:50
ん、あれ?
別の板の正規表現スレで似た話があったから、その続きかと思った。
量指定子を+と*で書くと、

/*([^*]|*+[^/*])**+/

となる。

401:デフォルトの名無しさん
08/11/10 15:03:37
>>400
回答ありがとうです<(_ _)>
よく考えて見ます。。
ちなみにマルチはしていません@@

402:デフォルトの名無しさん
08/11/10 22:36:25
コンパイラコンパイラで使用できる正規表現というかEBNFは、しょぼくて、マルチバイト
対応するの大変だから生成されたパーサだけ使用して、スキャナは自前実装がお勧め。


403:デフォルトの名無しさん
08/11/11 04:08:42
●正規表現の使用環境
Excel & 正規表現検索
URLリンク(srcedit.pekori.jp)
●検索か置換か?
置換
●説明
英単語のみ先頭文字を小文字化
●対象データ
One
Two
Three3
●希望する結果
one
^
two
^
Three3
^^^^^^^
○自分の経緯
 検索:(^[a-z])([a-z]*)
 置換:[LOWER]$1$2
 結果:One ⇒ [LOWER]One
○知りたいこと
 このアドインにある「特殊置換」を利用する際の文法
以上、お願いいたします。

404:デフォルトの名無しさん
08/11/11 10:08:45
おれなら Excel をデスクトップの「ごみ箱」へD&Dする

405:デフォルトの名無しさん
08/11/11 18:18:15
コントロールパネルからアンインストールしないと意味ないって警告出るだろ。

406:デフォルトの名無しさん
08/11/12 05:26:09
mmMMamUUqpndbback

407:403
08/11/12 05:43:22
それができたら、どんなに楽か・・・

408:デフォルトの名無しさん
08/11/12 20:14:38
とりあえずこのスレ>>1-10まで流し見て全く理解できなかった
もう一度読んでみるのが怖い

409:デフォルトの名無しさん
08/11/12 20:43:19
>>403
特殊置換は変換後にそれだけしか書けないんじゃない?
とりあえず変換するだけなら↓でいけないか
変換前:^[a-z]+$
変換後:[LOWER]

410:デフォルトの名無しさん
08/11/13 00:28:30
検索:A([a-z]*)  置換:a$1
検索:B([a-z]*)  置換:b$1
検索:C([a-z]*)  置換:c$1
検索:D([a-z]*)  置換:d$1
検索:E([a-z]*)  置換:e$1
検索:F([a-z]*)  置換:f$1
検索:G([a-z]*)  置換:g$1
検索:H([a-z]*)  置換:h$1
検索:I([a-z]*)  置換:i$1
検索:J([a-z]*)  置換:j$1
検索:K([a-z]*)  置換:k$1
(省略されました続きを読むにはここをクリックしてください)

411:デフォルトの名無しさん
08/11/14 12:10:39
●正規表現の使用環境
Repl-Ace
URLリンク(www.sirmiles.com)
●検索か置換か?
置換
●説明
testA
きょう
あした
testEndA

testA
あした
あさって
しあさって
testEndA
のようなtestAからtestEndAで囲まれている文字列(改行あり)を特定文字列に置換
●希望する結果
testA
1週間前
2週間前
testEndA

412:デフォルトの名無しさん
08/11/14 14:23:21
正規表現を魔法のプログラミング言語だと勘違いしてないか?

413:デフォルトの名無しさん
08/11/14 14:52:11
そのツールでうまくいくかどうかわからんが

パターン testA\n.*?testEndA\n
置換文字列 testA\n1週間前\n2週間前\ntestEndA\n

でいいのか?

何を期待してるのだかよくわからんが...

414:デフォルトの名無しさん
08/11/14 14:59:43
処理系によってはドットは改行とマッチしないので注意。

415:デフォルトの名無しさん
08/11/14 19:38:18
正規表現に通じている先輩は正に魔法のように正規表現を使ってあらゆるリクエストに解を提示している。
あんな人になるには一体どうすればいいんだろうか?

416:デフォルトの名無しさん
08/11/14 20:57:27
とりあえずふくろう本は読んだか?

417:デフォルトの名無しさん
08/11/14 21:46:38
やっぱりあのそこそこ分厚い青い本に挑戦したほうがいいみたいですね。TODOリストの一番上に上げときます。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch