正規表現 Part5
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/06/03(火) 22:07:28質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。
前スレ
正規表現 Part4
http://pc11.2ch.net/test/read.cgi/tech/1186030400/
0002デフォルトの名無しさん
2008/06/03(火) 22:08:44正規表現メモ
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/
[WebProg] 正規表現道場
http://pc11.2ch.net/test/read.cgi/php/1168450843/
◆前スレ
[1] http://pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] http://pc8.2ch.net/test/read.cgi/tech/1131028296/
[3] http://pc11.2ch.net/test/read.cgi/tech/1156413899/
[4] http://pc11.2ch.net/test/read.cgi/tech/1186030400/
0003デフォルトの名無しさん
2008/06/04(水) 04:23:54[\∧∨ヮ]
([w]{5}|[w]{3})
これを一行にまとめるとどういう書き方ができるでしょうか?
0004デフォルトの名無しさん
2008/06/04(水) 04:28:500005デフォルトの名無しさん
2008/06/04(水) 18:10:12●正規表現の使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
0006デフォルトの名無しさん
2008/06/05(木) 01:44:430007デフォルトの名無しさん
2008/06/05(木) 20:10:150008デフォルトの名無しさん
2008/06/05(木) 20:14:17>>2
> ◆前スレ
0010デフォルトの名無しさん
2008/06/06(金) 00:19:51http://2ch.tora3.net/
0011デフォルトの名無しさん
2008/06/07(土) 01:24:25囲まれた部分が複数あると全部をまとめて見つけてしまいます。
最初のひとつだけを対象にするにはどう書けば良いでしょうか?
data="あいうえお" name="かきくけこ"
このような文字列の中から
あいうえお
だけを検索したいです。
現在は
reg = New Regex("data=""(?<DATA>.+)""", RegexOptions.Compiled)
というようにしてあります。
これだと、
str = reg.Match(pagedata).Result("${DATA}")
での取得結果が
あいうえお" name="かきくけこ"
になってしまいます。
VB.NETなのですが、宜しくお願いします。
0012デフォルトの名無しさん
2008/06/07(土) 02:07:35reg = New Regex("data=""(?<DATA>.+?)""", RegexOptions.Compiled)
0013デフォルトの名無しさん
2008/06/07(土) 03:05:29すごい!出来ました
ありがとう
色々調べたのに全然違ってた^ー^;)
0014デフォルトの名無しさん
2008/06/07(土) 04:07:24あぼーん対象になってた
0015デフォルトの名無しさん
2008/06/12(木) 03:01:13ローカルパートの前後の"だけを除去したいのですがどう書けば良いのでしょうか
preg_replace('/[^\\\]"/', '', $str);
では最初の"が除去されませんでした
0016デフォルトの名無しさん
2008/06/12(木) 09:13:54メールアドレスに「\で"をエスケープ」なんて仕様あったっけ?
0017デフォルトの名無しさん
2008/06/12(木) 09:29:16001815
2008/06/12(木) 14:16:47ローカルパートでスペースや","といった文字を使う場合はダブルクォートで括る必要があるみたいです。
受信したメールで希にそういうものがありました。
>17
おとなしくそんな対応にしましたどうもです
0019デフォルトの名無しさん
2008/06/12(木) 16:36:41「""で括る」というのはその通りなんだけど、その括られた中で \" と
いう記述のルールはあるの、ということ。
0020デフォルトの名無しさん
2008/06/12(木) 17:52:10http://www003.upp.so-net.ne.jp/hat/imail/sec08.html
>もっと面倒なのは、ユーザ名に「"」や「\」が入っている場合です。
>このときは「""」で括っただけではダメだという決まりがあるので、直前に「\」を付けます。
>次は、ユーザ名が「urashima"taro」の場合と、「urashima\taro」の場合です。
To: "urashima\"taro"@example.com
To: "urashima\\taro"@example.com
だそうです。
0021デフォルトの名無しさん
2008/06/12(木) 18:23:570022デフォルトの名無しさん
2008/06/12(木) 18:25:55また大嘘を…
0023デフォルトの名無しさん
2008/06/12(木) 19:41:30ほんとだ、確認してみたらちゃんとそういうルールがあったね。騒がせてごめん。
0024デフォルトの名無しさん
2008/06/16(月) 20:51:15sakuraエディタをインストールして
<A href="http://www.xxx.com/" target="_blank">ABC</A>
を
<A href="http://www.xxx.com/" target="_blank"
title="http://www.xxx.com/">ABC</A>
に置き換える方法を探してるんですけど、別所で
・検索文字列に「<(a|A) ([^>]*)href="([^"]+)"」、置換文字列に「<$1 $2href="$3" title="$3"」と入れる
・置換する。
といわれたのを参考に色々試したんですが、全くの無知なもので、ぜんぜん置き換えできないので、
よければ詳しく教えてください。
テキスト内全部置き換えじゃなくて、通常の置き換えみたいに下方向とか指定できれば助かるんですが、
無理ならHTMLから部分的に切り取ってやってみます。
0025デフォルトの名無しさん
2008/06/16(月) 21:04:20あとはsakuraエディタの問題だからこれ以上はスレ違い
0026デフォルトの名無しさん
2008/06/16(月) 21:14:28href="$1" title="$1"
めんどくさいし、これでいいよ
0027デフォルトの名無しさん
2008/06/16(月) 21:27:19失礼しました。
0028デフォルトの名無しさん
2008/06/16(月) 21:32:09URLにある文字列
たとえば www.abcd などのドメイン名が含まれる場合のみ置き換えて、他のドメインは一切触らないってコマンドも可能ですか?
www.abcd.aa www.abcd.ab とwww.abcdが含まれる物は当然全部置き換えるようにしたいんですけど……
0029デフォルトの名無しさん
2008/06/18(水) 17:36:50003028
2008/06/19(木) 07:51:48でもやってみたけど出来ませんでした。()と[]で囲んでみましたが、駄目でした。
>24も私なんですけど、
色々調べてみたんですが、([^"]+)の( )内は$で指定できるってのは分かったんですが、
[^"]+でどうしてurlが指定できてるのか全く理解できません。
とりあえず、以下の置き換え方法が分かれば、知りたいこと全部解決するのですが、
<A href="http://www.xxx.com/a/a.html" target="_blank">AA</A>
<A href="http://www.123.com/a/a.html" target="_blank">123</A>
<A href="http://www.xxx.com/a/b.html" target="_blank">AB</A>
<A href="http://www.123.com/a/bhtml" target="_blank">123</A>
<A href="http://www.xxx.com/b/c.html" target="_blank">BC</A>
上記URLが並んでいたとして、以下のように置き換え。
<A href="http://www.xxx.com/a/a.html" target="_blank" title="AA http://www.xxx.com/a/a.html">AA</A>
<A href="http://www.123.com/a/a.html" target="_blank">123</A>
<A href="http://www.xxx.com/a/b.html" target="_blank" title="AB http://www.xxx.com/a/b.html">AB</A>
<A href="http://www.123.com/a/b.html" target="_blank" title="123_b.html">123</A>
<A href="http://www.xxx.com/b/c.html" target="_blank" title="BC (http://www.xxx.com/a/b.html)">BC</A>
4と5行目は可能ならって感じですが、これ全部分かれば今後の応用もアレンジできそうなので。
>24が解決すれば全部自分で出来そうだと思ってましたが、甘かったです。
図々しいですが、分かる方いましたら教えてください。
0031デフォルトの名無しさん
2008/06/19(木) 09:27:36perlとかrubyとか、正規表現とテキストの扱いに長けたスクリプト言語を使うとか、
エディタの置換でも、一発で全て解決しようとせずに
多段階で置換するとか、目的の物を他と区別出来る一旦違う形に変換するとか、
そういう工夫が要る。
個人的には、数が多くて今後もまたやる作業なら、何らかの言語を使う。
0032デフォルトの名無しさん
2008/06/19(木) 09:43:42正規表現マッチングする前にHTMLパーサーとか使って処理したい。
0033デフォルトの名無しさん
2008/06/19(木) 09:56:48実用だったら早々に見切りを付けるのも肝心だよね。
複雑な正規表現は、後で手直しするのも面倒だし。
003430
2008/06/19(木) 11:32:57では、これだけでも無理でしょうか?
<A href="http://www.xxx.com/a/a.html" target="_blank">AA</A>
<A href="http://www.123.com/a/a.html" target="_blank">123</A>
<A href="http://www.xxx.com/a/b.html" target="_blank">AB</A>
上記URLが並んでいたとして、以下のように置き換え。
<A href="http://www.xxx.com/a/a.html" target="_blank" title="http://www.xxx.com/a/a.html">AA</A>
<A href="http://www.123.com/a/a.html" target="_blank">123</A>
<A href="http://www.xxx.com/a/b.html" target="_blank" title="http://www.xxx.com/a/b.html">AB</A>
29さんのでは理解できなかったので、要するに、1行目と3行目は24の方法で出来てるので、
24の方法に「この部分がマッチした場合のみ置き換え」って感じで加工したいのですが、
([^"]+)の( )内を弄ればいいんでしょうけどやってみましたが、検索できなくなってしまいます。
0035デフォルトの名無しさん
2008/06/19(木) 12:09:29暇なので書いてみた。Pythonだけど、出来合いのHTMLパーサは使ってない。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6967.txt
>>30のようなことをやりたければ、ツリーパーサがないと面倒だな。
003634
2008/06/19(木) 12:35:03こんなに複雑なこと頼んでたんですか……
置き換えで出来ると思ったけど甘かったんですね。
使い方調べてやってみます。
ありがとう御座いました。
003734
2008/06/19(木) 12:58:55何かソフト必要なんでしょうか?Windows使用です。
最後の("http://www.xxx.com")を書き換えることぐらいしか検討つきません。
abc.txtの内容を置き換えるとして、どのようにしてやればいいのか教えてほしいです。
いまここをみてるんですが、分かりかけてるようで分からない。
ttp://d.hatena.ne.jp/cloudnet/20080609/pythonfile
Blenderで3Dメッシュ加工したことはありますが、関係ないですよね・・
0038デフォルトの名無しさん
2008/06/19(木) 13:37:21pythonのスクリプトだから、pythonがインストールされていなければダメだよ
foo.pyという名前で保存したとすると
python foo.py <hoge.html
のようにして標準入力から食わせてやるとよい
0039デフォルトの名無しさん
2008/06/19(木) 13:54:59$htm = <<_EOF;
<A href="http://www.xxx.com/a/a.html" target="_blank">AA</A>
<A href="http://www.123.com/a/a.html" target="_blank">123</A>
<A href="http://www.xxx.com/a/b.html" target="_blank">AB</A>
<A href="http://www.123.com/a/bhtml" target="_blank">123</A>
<A href="http://www.xxx.com/b/c.html" 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=http://www.xxx.com/a/a.html target="_blank" title="AA http://www.xxx.com/a/a.html">AA</A>
<A href="http://www.123.com/a/a.html" target="_blank">123</A>
<A href=http://www.xxx.com/a/b.html target="_blank" title="AB http://www.xxx.com/a/b.html">AB</A>
<A href="http://www.123.com/a/bhtml" target="_blank">123</A>
<A href=http://www.xxx.com/b/c.html target="_blank" title="BC http://www.xxx.com/b/c.html">BC</A>
------------------------------------------------------------------------------
0040デフォルトの名無しさん
2008/06/19(木) 14:04:24anchorの子要素になり得るので注意
0041デフォルトの名無しさん
2008/06/19(木) 14:30:04anchorとか
foo.pyとか全く理解できないんですが、
いまここから
http://www.activestate.com/
ActivePerl 5.10.0.1003 for Windows (x86)をダウンロードしてインストールしてみました。
0042デフォルトの名無しさん
2008/06/19(木) 14:36:550043デフォルトの名無しさん
2008/06/19(木) 14:39:39自分でコンパイルもできるよ
0044デフォルトの名無しさん
2008/06/19(木) 14:39:560045デフォルトの名無しさん
2008/06/19(木) 14:43:45やりたいのは、sakuraエディタで今開いてるabc.txtの置き換えです。
35サンと39さんが同じ人かは分かりませんが、39さんの手法が分かりやすそうなんで、
別の人だったら35さんには悪いですが、pealって書いてあるから
必要だと思ってインストールしてみたんですが、動かし方がよく分かりません。;;
0046デフォルトの名無しさん
2008/06/19(木) 14:45:230047デフォルトの名無しさん
2008/06/19(木) 14:52:11を落としてインストールしました。
前にBlender弄ったときに入れた気もしますが。
0048デフォルトの名無しさん
2008/06/19(木) 15:00:310049デフォルトの名無しさん
2008/06/19(木) 16:13:44試行錯誤して困ったらまたおいで。
005048
2008/06/19(木) 18:41:53python234jp-20040927
をインストールして、helpファイルずっと見てるんですが、さっぱり理解できません;;
pythonについては別板で聞いたほうがいいんですかね?
005139
2008/06/19(木) 19:14:10# 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;
0052デフォルトの名無しさん
2008/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のほうも弄ってますが、まだわかりません。
0053デフォルトの名無しさん
2008/06/19(木) 22:13:56単体の数字や何故か英単語まで反応してしまって困っています。
要するに数値といずれかの演算子を含むパターンが組めればよいのですが、正規表現に馴れておらずうまくいきません。
問題なく検索可能なパターンを教えていただけないでしょうか?
「50+2*2 付随テキスト」にはマッチする。
「50 付随テキスト」にはマッチしない。
現在問題の出ているパターン
new RegExp("^([\d\+\-d\*\/\(\)r@]+)[ | ]*(.*)", "i") //d, r, z ,@は演算子としてそれ以降の処理で使用しています
0054デフォルトの名無しさん
2008/06/19(木) 23:35:08とりあえずヒントとしては、
●JavaScriptの文字列定数内では \ がエスケープ文字
●[演算子じゃない文字]([演算子][演算子じゃない文字])+
0055デフォルトの名無しさん
2008/06/19(木) 23:36:33に訂正。
厳密じゃないけどね。
0057デフォルトの名無しさん
2008/06/20(金) 00:51:11おまえなぁ、要求をコロコロ変えるなよ。
あとからあとからチビチビ仕様を変更せずに、最初にキッチリ書いとけよ。
0058デフォルトの名無しさん
2008/06/20(金) 01:01:11わかったかった。「置き換える」の意味が、やっとわかったよ。
ここは正規表現スレなんで、置換の事だと勘違いしてた。
unko.pl は画面に表示するだけだ。
置き換えしたければ abc.txt を open して print 文で $htm を書き出せ。
0059デフォルトの名無しさん
2008/06/20(金) 06:58:380060デフォルトの名無しさん
2008/06/20(金) 07:40:45私のやり方が間違ってたようです。
お二人には感謝してます。
プログラムの面白さが分かったような気がするので、これを機に少しずつ勉強初めてみます。
最初はやっぱりcgiとかがいいんでしょうか?
web関係で役立つスキルが欲しいのですが・・・・
0061デフォルトの名無しさん
2008/06/20(金) 10:21:09お手軽さならJavaScriptかな。
ローカルでも実行可能だし、正規表現も扱えるし、ページを動的加工して遊べるし。
0062デフォルトの七資産
2008/06/20(金) 16:04:20**県※※郡○○市●●-●●
この文字列を
都道府県名、郡名、市区町村名、その他に分けるときの正規表現はどうしたらいいのでしょう?
※「村山市」や「四日市市」など市区町村名に「市区町村」の四文字が入ったものは考えないものとします。
言語はPHPです。
0063デフォルトの名無しさん
2008/06/20(金) 18:11:47自分でどこまで書いてみた?
0064デフォルトの名無しさん
2008/06/20(金) 19:23:36/([^県]+県)([^郡]+郡)([^市]+市)(.*)/で、$1〜$4かなぁ。
郡って必ず付くのかな。
0065デフォルトの名無しさん
2008/06/20(金) 20:41:430066デフォルトの名無しさん
2008/06/20(金) 23:59:540067デフォルトの名無しさん
2008/06/23(月) 22:05:00Adobe 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や.*がたくさん出てきてしまい、困っています。
もう少し簡素化できないでしょうか?
ご教授お願いします。<(__)>
0068デフォルトの名無しさん
2008/06/23(月) 22:27:03<!-- start -->(\n|.)*<!-- end -->
こんな感じ?
0069デフォルトの名無しさん
2008/06/24(火) 02:17:47mオプションとか
マルチラインモードとか
そういう機能はない?
007067
2008/06/24(火) 06:16:41まさしくそれです!検証したところバッチリ動作しました。
これで管理が楽になると思います。
ありがとうございます(^^)
>>69さん
mオプション、マルチラインモード等の語句でググってきました。
残念ながら今の自分の頭では理解しきれず、その機能があるかどうか不明
です...(ノД`)・゜・。ゴメンナサイ,モット勉強シテキマス
また行き詰まったとき、来させて頂きます。
教えて頂いた方々、本当にありがとうございました。
0071デフォルトの名無しさん
2008/06/25(水) 16:48:011文字以上で特定の文字(チェックしたいのは [ と ] )を含まないってどう書くんでしょうか?
0072デフォルトの名無しさん
2008/06/25(水) 17:43:46>>2 に書いてあるよ。それ読んでもわからなかったら、また質問しにおいで。
007371
2008/06/27(金) 15:05:09C#で試しに'A'がある文字列をはじくように書いてみましたがうまく
動きませんでした。
string pat = @"^(?!A)*$";
bool result;
result = Regex.IsMatch( "あいうえお", pat );
result = Regex.IsMatch( "あいうAえお", pat );
pat を @"^[^A]*$"
にしてみたらうまく動いたけど、なんで最初の条件で動かないんでしょうか・・。
0074デフォルトの名無しさん
2008/06/27(金) 15:29:12.netの正規表現には詳しくないんだけど、一般的な解釈で考えるとこれ
はパターンの文法エラーになってもおかしくないよ。ふつうは先読みや
後読みに繰り返し(+ * {n,m})は付けられない。先読みや後読みは文字を
消費しないので、繰り返しても意味がない。
0075デフォルトの名無しさん
2008/06/27(金) 17:08:29ありがとう。
0076デフォルトの名無しさん
2008/06/29(日) 19:41:44当方はhtmlまでしか理解できてません。
スタイルシートの理解度は10%程度です。
たまに、メモ帳の置き換えで正規表現を使うぐらいです。
ttp://www.ahref.org/cgi/urlchu/
多少アレンジするつもりですが、最低限必要なことが知りたいです。
0077デフォルトの名無しさん
2008/06/29(日) 20:06:25* CGIの基礎。フォームから受け取った入力にどうやってアクセスするか
* スクリプト言語。Perl, PHP, Python, Rubyのうち好きなのをどれか
あとはHTMLからリンクを抽出する方法でぐぐれば
各スクリプト言語用のサンプルがいくらでも出てくるからそれを使えばOK
これ以降は正規表現云々よりCGIの話だからそっちいって聞いておいで
0078デフォルトの名無しさん
2008/06/29(日) 23:09:48007977
2008/06/29(日) 23:16:420080デフォルトの名無しさん
2008/07/01(火) 00:04:06きたいんですが、状態が 8 つ、受理状態が 4 つの状態遷移図は書けるものの、
これをどうやって正規表現に落とせばいいかわかりません。。。
状態遷移図を正規表現にするときのコツみたいのってありますか?
0081デフォルトの名無しさん
2008/07/01(火) 00:47:100082デフォルトの名無しさん
2008/07/01(火) 05:16:53http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/regex-4-10.html
0083デフォルトの名無しさん
2008/07/08(火) 16:34:43ある文字列に10〜20などが入っていた場合にはその文字列を表示しようとしているのですが
自分ではスマートなやり方が思いつかなかったので
まず数字-数字に対して([0-9]{1,2})-([0-9]{1,2})とヒットさせ
前括弧をprematch
後括弧をaftmatchとして
for(int i=prematch; i<=aftmatch;i++)
と回して
10|11|12|...|20
と力技で置換し
それを文字列に対して正規表現でマッチさせています
何か良いスマートな方法はありませんか。
0084デフォルトの名無しさん
2008/07/08(火) 16:41:04/\d+/抜き出して[10,20]かどうか判断すればいいじゃん。
0085デフォルトの名無しさん
2008/07/08(火) 17:09:46なるほど
検索文字列をどうにかするのではなく
被検索文字列から数字のみを抜き出せばいいんですね
その方法を少し変え別の部分にも適応すると
その部分も解決しそうです
ありがとうございました
#[xx,yy]という表現を知らなかったから勉強し直そう…
0086デフォルトの名無しさん
2008/07/08(火) 17:14:49中身に関係ないけど、
pre <-> post
before <-> after
じゃないのか。
0087デフォルトの名無しさん
2008/07/08(火) 18:01:54postなんて表現があったんですね
直しました、有難うございます
0088デフォルトの名無しさん
2008/07/08(火) 22:40:23//E //FF //G
//H //I
//J
上のデータで以下の塊で取り出したいのですが
//A //BBBB //C //DD
//E //FF //G
//H //I
//J
どのような表現をとればよいでしょうか
環境はjavaです
008988
2008/07/08(火) 22:45:31自己解決しました。
0090デフォルトの名無しさん
2008/07/12(土) 14:15:00相談させて下さい。
\d{2}.\d{2}.\d{2}
で、年.月.日の一番新しいファイルを取ってきていたのですが
何故か2月分のファイルを取ってくる様になりました。
1月〜今月までのファイルは有るのですが、コードを打ち込みなおしても
直りませんでした。
対処法などが有ればご教授ください。
0091デフォルトの名無しさん
2008/07/12(土) 14:22:55抽出元のフォーマットはどんな感じになってるんだ
0092デフォルトの名無しさん
2008/07/13(日) 08:23:29hoge08.01.01.xls 〜 hoge08.07.13.xlsと言う感じなのですが
何か心当たりは有りますでしょうか?
0093デフォルトの名無しさん
2008/07/13(日) 08:37:28とりあえず . はドットそのものじゃなくて任意の一文字を表す
ドットそのものは \. ね
0094デフォルトの名無しさん
2008/07/13(日) 10:26:29http://homepage.mac.com/overspeeds/Windows/WindowsMACAdd.htm
0095デフォルトの名無しさん
2008/07/13(日) 11:50:24hoge08.02.14.xls辺りを優先でマッチしてしまう様だったので
\d{2}.07.\d{2}に変更すると、今月内の最新のを優先で当たります。
>\.についても気になったので、直したのですが動作的には
変りませんでした。
0096デフォルトの名無しさん
2008/07/13(日) 12:47:050097デフォルトの名無しさん
2008/07/13(日) 14:58:19何か正規表現で一番最優先でマッチしてくるものとかが有るのかな?
と思ってみたのですが、以前は正常に稼動していたので
サーバで異常な動作なのかな・・・。
大変有難う御座いました。
0098デフォルトの名無しさん
2008/07/13(日) 17:05:51技術屋なら
擬似的にでも似たような環境を作ってテストしてみるのがいい
0099デフォルトの名無しさん
2008/07/13(日) 17:37:58正規表現がやるのは「マッチ擦る/しない」だけで、
優先順位とかは検索処理側かと。
0100デフォルトの名無しさん
2008/07/13(日) 22:37:09\d{2}.\d2.\d{2} こうなってしまってるとか???
0101デフォルトの名無しさん
2008/07/14(月) 12:21:51例えば、今までは単純増加だったところに何らかの理由で2月のデータを更新して配置が変わってしまったとか。
いずれにしても、検索処理側の問題だな。
0102デフォルトの名無しさん
2008/07/14(月) 12:37:08探しているのですが、可能でしょうか?よろしくお願いします。
0103デフォルトの名無しさん
2008/07/14(月) 12:47:55>5
0104デフォルトの名無しさん
2008/07/14(月) 13:09:50「12345」や「67890」の様に5桁の数字を含む書き込みとそれに関連するレスを表示したい、
と言うわけです。レス抽出オプションの関連レスを含めるを使用しない形でと思いましたのでよろしくお願いします。
0105デフォルトの名無しさん
2008/07/14(月) 13:28:55つーか、janeと言われても派生が多くてどれのことだか判らんが。
0106デフォルトの名無しさん
2008/07/14(月) 13:31:04ちなみに他の正規表現は使用できています。
0107デフォルトの名無しさん
2008/07/14(月) 13:42:470108デフォルトの名無しさん
2008/07/14(月) 13:53:29ありがとうございます。でもそれだと5桁の数字の書かれている書き込みのみの表示となってしまい
それに関連するレスが表示できないところで悩んでいます…
0109デフォルトの名無しさん
2008/07/14(月) 13:55:170110デフォルトの名無しさん
2008/07/14(月) 13:58:340111デフォルトの名無しさん
2008/07/14(月) 14:01:000112デフォルトの名無しさん
2008/07/14(月) 14:09:46そもそもViewスレで質問する内容だと思うんだが
一つ前のレスで>5へのリンクが貼ってあるにも関わらず読まずに
使用環境書かないし
0113デフォルトの名無しさん
2008/07/14(月) 14:53:410114デフォルトの名無しさん
2008/07/15(火) 21:50:07返信有難う御座います。
正規表現部分のソースコードは睨めっこしても問題無さそう
なので、なんだか不明です。
いちご2008.01.01〜
みかん2008.01.01〜
みたいに取得するファイルは沢山有って、例えばいちごだけが
2月のファイルを取ってくるって動作になっちゃってます。
ディレクトリやファイルネームの間違えも確認しましたが・・・orz
とりあえず、\d{2}.07.\d{2}の回避方法で運用でカバーすることにしました。
サーバは怖くてリブート出来ないので・・・。有難う御座いました!
0115デフォルトの名無しさん
2008/07/16(水) 00:44:39正規表現とヒットする順序には何ら関連がないことは理解できたの?
0116デフォルトの名無しさん
2008/07/16(水) 01:32:20そういう事って可能でしょうか?よろしくお願いします。
0117デフォルトの名無しさん
2008/07/16(水) 03:04:17どう見ても小学生くらいに見えるのなら、先ず大丈夫でしょう。
0118デフォルトの名無しさん
2008/07/16(水) 03:50:00取りこぼしがあっちゃいけないと思うが…
0119デフォルトの名無しさん
2008/07/16(水) 08:15:27それでは先ず、「処女」の定義をはっきりさせてください。
定義がはっきりしたら、対処してご覧に入れます。
0120デフォルトの名無しさん
2008/07/16(水) 08:44:040121デフォルトの名無しさん
2008/07/16(水) 15:30:430122デフォルトの名無しさん
2008/07/17(木) 18:29:00これの{{ABC}}と{{XYZ}}にマッチさせる表現を教えて下さい。
{{.*}}だと全体がマッチしちゃって・・・お願いします。
0123デフォルトの名無しさん
2008/07/17(木) 18:30:380124デフォルトの名無しさん
2008/07/17(木) 18:59:17とりあえず {{[^}]*}} でもいいかもねー。
0125122
2008/07/17(木) 19:10:27ヒントありがとうございます。
>>124
おおっ!
秀丸の強調表示で使おうと思ってました。
で、自分なりに
{{[a-z^A-Z^0-9^ ^$^/^=^+^%^#^\-^_^!^.^,^&^\(^\)^;^:^\"^\'^\?^亜-�K^ァ-ヶ^ぁ-ん^0-9^a-z^A-Z^`]*}}
とかやったらよさげだったんですが、>>124でおkですね
本当にありがとうございました。
0126デフォルトの名無しさん
2008/07/17(木) 21:02:42頑張りすぎ
0127デフォルトの名無しさん
2008/07/18(金) 09:55:24SJIS?
0128デフォルトの名無しさん
2008/07/18(金) 10:28:49Unicodeだと破綻しちゃうな。
[:alpha:]みたいな感じで、仮名や漢字を指定する構文があればイイのに。
0129デフォルトの名無しさん
2008/07/18(金) 11:13:43>>128
Unicodeだと、その範囲の漢字はCJK UNIFIED IDEOGRAPHと
CJK COMPATIBILITY IDEOGRAPHに入るんで、Unicodeのカテゴリやブロック名に
対応している正規表現エンジンなら、それを使うのが普通だと思う
そうでないなら、直接コードポイントを用いてU+4E00-U+9FBFとU+F900-U+FAFFで
指定すればいいんじゃないかな
0130デフォルトの名無しさん
2008/07/18(金) 13:18:47[\p{InCJKUnifiedIdeographs}\p{InCJKCompatibilityIdeographs}]
XML Schemaだと
[\p{IsCJKUnifiedIdeographs}\p{IsCJKCompatibilityIdeographs}]
かな。
0131デフォルトの名無しさん
2008/07/21(月) 21:01:19曜日を消したかったので
$date =~ s/\([月火水木金土日]\)//g;
というのでやってみたんですができなかったんですが
どうすればいいでしょうか
0132デフォルトの名無しさん
2008/07/21(月) 21:05:070133デフォルトの名無しさん
2008/07/21(月) 21:07:470134デフォルトの名無しさん
2008/07/21(月) 21:30:15おそらく perl スレで聞いたほうがいい質問だな。
0135デフォルトの名無しさん
2008/07/22(火) 05:04:38perlスレで質問してきます
0136デフォルトの名無しさん
2008/07/23(水) 17:27:02そのうち「テレビ体操」「みんなの体操。」を除外するにはどのように書けばいいでしょうか?
0137デフォルトの名無しさん
2008/07/23(水) 18:22:34>>1 を読んでください。
0138デフォルトの名無しさん
2008/07/23(水) 18:53:31すみません。これです http://1st.geocities.jp/tvrock_web/
一般的な話でいいので教えていただけると有り難いのですが。
0139デフォルトの名無しさん
2008/07/23(水) 19:36:20^((?!^テレビ体操$|^みんなの体操。$).)*体操.*$
こうかなあ・・・
0140デフォルトの名無しさん
2008/07/23(水) 19:39:190141デフォルトの名無しさん
2008/07/23(水) 19:40:150142デフォルトの名無しさん
2008/07/23(水) 21:11:20このような括弧になっている文字はどうやって指定したらいいんでしょうか?
\([0-9]{1,2}:[0-9]{1,2}\)
こんな感じで試してみたんですがうまくいきませんでした・・・。
0143デフォルトの名無しさん
2008/07/23(水) 23:55:13「(」とマッチさせたいときに「(」と書くか「\(」と書くか「\\(」と書
くかは環境依存なんだ。というわけで >>1 を読んで。
0144デフォルトの名無しさん
2008/07/24(木) 09:05:300145デフォルトの名無しさん
2008/07/24(木) 09:45:570146デフォルトの名無しさん
2008/07/24(木) 09:46:11>>1を100回音読しろ。
0147デフォルトの名無しさん
2008/07/24(木) 09:50:39/ /
これってどういう指定法なんでしょうか?
0148デフォルトの名無しさん
2008/07/24(木) 09:52:300149デフォルトの名無しさん
2008/07/24(木) 10:03:510150デフォルトの名無しさん
2008/07/24(木) 11:32:450151デフォルトの名無しさん
2008/07/28(月) 14:13:27([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 の正規表現で書けますか ?
0152デフォルトの名無しさん
2008/07/28(月) 14:35:57([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)]なら動く
0153デフォルトの名無しさん
2008/07/28(月) 14:45:11(abc) → abc は、(abc) が入ったとき、それを abc に置換したい、という意味です。
【文字列】 → 文字列
【文字列A】と【文字列B】 → (置換しないでそのまま)
《簡単な【文字列】》 → 簡単な【文字列】
【入れ子の《文字列の【中身】は》そのまま】→入れ子の《文字列の【中身】は》そのまま
【またいでいる《かっこは】そのまま》 →(置換しないでそのまま)
という置換をしたいのです。
0154デフォルトの名無しさん
2008/07/28(月) 14:55:46やりたいことは分かったんだが俺には分からないから賢者に任せる
基本外側にある括弧は取り除く
例外として括弧が並んでる or 括弧が入れ子になってる場合は括弧を取り除かない
という感じか
0155デフォルトの名無しさん
2008/07/28(月) 15:10:52pattern code expression (??{ expr }) を使えば再帰的な正規表現を書くことが出来る。
0156デフォルトの名無しさん
2008/08/02(土) 20:51:340157デフォルトの名無しさん
2008/08/02(土) 22:50:530158デフォルトの名無しさん
2008/08/05(火) 04:00:55物価高で肉が食えないからスタミナ無い。
エアコン代もバカにならない。
しかもCPUは温風を吐き出しまくる!
暑い。あ゛〜〜〜っ!もう我慢ならん!
正規表現でなんとかなりませんかねぇ
0159デフォルトの名無しさん
2008/08/05(火) 16:06:39どんなものがありますか?
0160デフォルトの名無しさん
2008/08/05(火) 16:10:350161デフォルトの名無しさん
2008/08/05(火) 16:11:33仕事速いね!
ありがとうございます
0162デフォルトの名無しさん
2008/08/21(木) 14:13:15/うは(w|w){2,}|おk(w|w){2,}/
これに類する内容をマッチさせるのにもっとスマートな方法はないものか。。
0163デフォルトの名無しさん
2008/08/21(木) 15:06:330164デフォルトの名無しさん
2008/08/23(土) 06:35:430165デフォルトの名無しさん
2008/08/23(土) 09:18:49っつーか /.*/ でも無限ループとは言える。
循環参照?
0166デフォルトの名無しさん
2008/08/24(日) 05:38:57カレー板限定で見えなくする上手い正規表現は無いでしょうか・・・
お前ら、美味しいレトルトカレーを教えれ! 7袋目
http://food8.2ch.net/test/read.cgi/curry/1203495304/
0167デフォルトの名無しさん
2008/08/24(日) 05:42:180168デフォルトの名無しさん
2008/08/24(日) 09:05:20http://food8.2ch.net/test/read.cgi/curry/1203495304/617
正規表現に特定板限定自動荒らし検知機能はないよ。
0169デフォルトの名無しさん
2008/08/26(火) 09:20:24後ろの部分がうまく除去されません。
^([ ]*)(.*)([ ]*)$
どのようにすればうまく行きますか?
0170デフォルトの名無しさん
2008/08/26(火) 10:34:12その記法が使える環境なら、[^ ]* とか?
0171デフォルトの名無しさん
2008/08/26(火) 10:34:580172デフォルトの名無しさん
2008/08/26(火) 10:45:090173デフォルトの名無しさん
2008/08/26(火) 11:22:09これで引っ掛けられる?
\sは空白、\Sは非空白ね。
^と$は必要ないかも。
0174デフォルトの名無しさん
2008/08/26(火) 12:05:02function trim(str){ return str.replace(/^[ \t]+|[ \t]+$/g, ""); }
0175デフォルトの名無しさん
2008/08/29(金) 11:48:35メールのコメントをみんなどうしてるのかずっと悩んでました
0176デフォルトの名無しさん
2008/08/30(土) 07:59:250177デフォルトの名無しさん
2008/08/30(土) 10:09:57形式言語的な意味で「正規(正則)」な言語ではなくなってるけどね
0178デフォルトの名無しさん
2008/08/30(土) 13:12:16後ろってどっちですか?
0179デフォルトの名無しさん
2008/08/30(土) 15:32:26プログラムカウンタが進む方(番地が大きい方)が前っぽいのに、
前方参照っつーと番地が若い方だったり。
0180デフォルトの名無しさん
2008/08/30(土) 16:19:580181デフォルトの名無しさん
2008/08/30(土) 16:20:490182デフォルトの名無しさん
2008/08/31(日) 10:38:11予め文字列を逆にしておき連続する改行の後ろだけにマッチ
/\n(?=(?:\n[^\n]+)+)$/
もっとスマートな方法があれば教えてください
0183デフォルトの名無しさん
2008/08/31(日) 11:31:48って事なら、リバースする前に
/[^\n]+\n(?=\n+)/
じゃダメなのかな
0184182
2008/08/31(日) 11:58:23ここまで解ってるなら逆にする必要なかった
/^((?:[^\n]+\n)+)\n(.*)$/m
これで\1と\2を取り出せば良いんですよね
0186デフォルトの名無しさん
2008/09/01(月) 08:28:15/\A((?:.+?\n)+?)(?:\n(.*))?\z/m
最終的にこうなりました
正規表現奥が深いです
0187デフォルトの名無しさん
2008/09/03(水) 08:43:01この範囲[x,y]って表現は何のことですか?java/rubyでもないんですけど・・
0188デフォルトの名無しさん
2008/09/03(水) 09:08:18数学
0189デフォルトの名無しさん
2008/09/03(水) 09:09:23[文字の範囲] と
{繰り返し回数} を混同してないか?
0190デフォルトの名無しさん
2008/09/03(水) 09:15:43\\s(\\w)
\\s([\\w])
の違いを調べてるんですが、同じくヒットするんですけど何か違いはあるんでしょうか。
\\w => \wです。
0191デフォルトの名無しさん
2008/09/03(水) 09:19:540192デフォルトの名無しさん
2008/09/03(水) 09:35:500193デフォルトの名無しさん
2008/09/03(水) 09:37:550194デフォルトの名無しさん
2008/09/03(水) 12:48:04デフォルトでは最長一致なんですが(c+は、c+?ではない方です)、このデフォルト
の挙動 c+ が強欲表現 c++ なんでしょうか?
いまいち c+ と c++ の違いがわからないのですが、何か良いサンプルはないでしょうか。
ちなみに、ネタじゃないですよ
0195デフォルトの名無しさん
2008/09/03(水) 13:21:19「強欲な数量子」でググれ
"ab" に対して /.+b/ と /.++b/ とか
0196デフォルトの名無しさん
2008/09/03(水) 13:29:59/c+/と/c++/単独では対した違いはないが、
強欲=「バックトラックしない」だから、後ろに対して影響がある。
たとえば、/c+c/は"ccc"にマッチするが、/c++c/は"ccc"にマッチしない。
0197デフォルトの名無しさん
2008/09/03(水) 13:35:38rubyでも廃止予定とか言わず、サポートすればいいのに…
0198デフォルトの名無しさん
2008/09/03(水) 14:17:080199デフォルトの名無しさん
2008/09/03(水) 18:21:05c+? : non-greedy (正規表現全体がマッチする範囲で最短)
c+ : greedy "貪欲" (正規表現全体がマッチする範囲で最長)
c++ : possessive "強欲" (正規表現全体がマッチしなくなっても、とにかく最長)
0200デフォルトの名無しさん
2008/09/04(木) 00:17:260201デフォルトの名無しさん
2008/09/04(木) 00:22:59イマイチ使う場面に遭遇しないんですけど…
どういう整形に必要かわからないんですけど、パタン表現になるぐらいだから、ある程度は需要があるのかなと思います。
これら特殊表現は、サンプルが多く出てくると、表現を理解できて、使える人がたくさん増えてくるのかなと思います。
0202デフォルトの名無しさん
2008/09/04(木) 04:46:06<(.+?)>
<(.+)?>
は何か差があるんでしょうか。
0203デフォルトの名無しさん
2008/09/04(木) 07:21:56<> や <abcd>>> みたいなのにもマッチするぞ
0204デフォルトの名無しさん
2008/09/04(木) 08:48:19正規表現を最適化するのに役立つ。
つまり「バックトラックしても無駄だ」っていうことを表明できる。
0205デフォルトの名無しさん
2008/09/04(木) 08:53:47そもそもそのバックトラックの違いで速度などの差が出るようなら、regexpライブラリ使わないでしょうし。
0206デフォルトの名無しさん
2008/09/04(木) 08:54:59お前が気にするか気にしないかは問題じゃない
0207デフォルトの名無しさん
2008/09/04(木) 09:05:39気にしてるのは、あなたの方ですよw
0208デフォルトの名無しさん
2008/09/04(木) 09:13:570209デフォルトの名無しさん
2008/09/04(木) 10:46:12おお、そんなところに差があったんですか!感謝です!
0210デフォルトの名無しさん
2008/09/04(木) 11:01:52c のstring.h程度なら自力で実装できるんですけど・・・
0211デフォルトの名無しさん
2008/09/04(木) 11:36:34やっと読み終わったぜ
http://codezine.jp/article/detail/1573
0212デフォルトの名無しさん
2008/09/04(木) 12:02:170213デフォルトの名無しさん
2008/09/04(木) 12:05:020214デフォルトの名無しさん
2008/09/04(木) 12:30:140215デフォルトの名無しさん
2008/09/04(木) 13:20:260216デフォルトの名無しさん
2008/09/15(月) 09:35:05/end/にマッチしない
というのをひとつの正規表現で書くのはどうすればいいですか?
0217デフォルトの名無しさん
2008/09/15(月) 10:31:310218デフォルトの名無しさん
2008/09/15(月) 10:37:40勝手に /^\w+$/ だと思い込んでみた。
0219デフォルトの名無しさん
2008/09/15(月) 20:23:01!//なんて技があるのか。
でもエディタの設定に//の中だけ書かなきゃいけないから使えないっぽい・・・
\b [^] |を駆使すれば出来そうだがめんどいな。
0220デフォルトの名無しさん
2008/09/15(月) 23:02:180221デフォルトの名無しさん
2008/09/15(月) 23:17:100222デフォルトの名無しさん
2008/09/16(火) 00:23:31○○かきくけこ○□345
○○あかさたな□○567
○○はまやらわ□□789
○○あいうえおかきくけこ
このような文字列の○○と□□を入れ替えるには
どうしたらいいのでしょうか?
※○□と□○はそのままにする
0223デフォルトの名無しさん
2008/09/16(火) 00:25:51\3\2\1\4
0224デフォルトの名無しさん
2008/09/16(火) 00:59:03ただ、それだと2、3、5行目の○○が□□にならないです。
0225デフォルトの名無しさん
2008/09/16(火) 01:37:44s/□□/○○/;
s/dummy/□□/;
0226デフォルトの名無しさん
2008/09/16(火) 23:29:17たとえば
あいう
えおか
きくけ
とこのようにあった場合「お」を含まない行「あいう」「きくけ」にマッチさせたいんですが
0227デフォルトの名無しさん
2008/09/16(火) 23:52:050228デフォルトの名無しさん
2008/09/17(水) 00:47:11多バイト文字に対応しているとして ^[^お]*$
だけど、大抵の正規表現処理系において >227 のように「マッチしない」を指定する方法があるので
そっちを使う方が賢明。
0229デフォルトの名無しさん
2008/09/17(水) 01:15:58>>228
レスありがとうございます。
すみません正規表現で文字処理するマクロソフト使用でしたので処理系があまり詳しくあえいませんでした。
^は基本でしたね、無事 ^[^お]*$ ですることが出来ました
ありがとうございます。
0230デフォルトの名無しさん
2008/09/17(水) 03:31:00読みにくく書きにくくしかも非力。もう駄目駄目。
2chの面白いレスにのみマッチするといった条件が記述できるくらい強力な
オブジェクト指向か関数型ベースの正規表現を作るべきなんだよ。
0231デフォルトの名無しさん
2008/09/17(水) 07:51:360232デフォルトの名無しさん
2008/09/18(木) 01:50:50javascriptです。
123451234512345
このような文字列があった場合 /1[0-9]*5/g とするとどのようにマッチするかわかりますか?
このようにして使っていたんですが、ブラウザごとに違う動作をするようでうまくいきません。
IEでは12345 12345 12345 と三つにマッチするみたいです。
このような曖昧なものにするとだめなのでしょうか。
対処策などありましたらお願いします。
0233デフォルトの名無しさん
2008/09/18(木) 03:36:500234デフォルトの名無しさん
2008/09/18(木) 09:17:030235デフォルトの名無しさん
2008/09/18(木) 09:53:49javascript:alert("123451234512345".match(/1[0-9]*4/g));
もちろん
1[0-9]*5
に変えると全部にヒット
JavaScriptのエンジンまでとは言わないからせめてブラウザぐらい書いてくれ
0236デフォルトの名無しさん
2008/09/18(木) 09:57:100237デフォルトの名無しさん
2008/09/18(木) 10:05:110238デフォルトの名無しさん
2008/09/18(木) 10:40:46"▶1◀▶23451234512345◀"
[0-9]*で残り全部にマッチしちゃって、最後の「5」があぶれそうに思えるけど、
ちゃんと全体にマッチするんだね。自分もまだ修行が足りない。
0239232
2008/09/18(木) 12:27:11正規表現間違っていただけかも・・
「12345」「12345」「12345」
このように3つにマッチさせたいと思ってました。
実際処理していた文字列は長いのですが
.* これを挟んでいたのになぜか
IE7では「12345」「12345」「12345」のように最短マッチのように出ていたみたいです。firefoxでは「123451234512345」
innerHTMLでの処理だったのでIEとfirefoxとでは改行?かなにか、文字列が変わっていたことが原因だったと思われます。
/1[0-9]*?5/gのように?をつけたら同じ動作をするようになりました。
レス下さった方ありがとうございます、勉強になりました。
0240デフォルトの名無しさん
2008/09/19(金) 19:54:29123456789と適当な桁数の数値があった時、先後読みだけで3桁ごとにカンマを挿入するにはどう記述したらいいのでしょうか。
preg_replace("/(?=[0-9]{3})/", ",", "123456789");
では左から3桁以下になるまでカンマが一桁ごとに入ってしまいます。
前後逆転せずにできる方法があればお願いします。
0241デフォルトの名無しさん
2008/09/19(金) 20:20:56http://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma
0242デフォルトの名無しさん
2008/09/19(金) 20:25:42整数をカンマ区切りに置換
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/regex-2-3.html
0243デフォルトの名無しさん
2008/09/19(金) 21:18:24ありがとうございます。
自分の頭の固さを痛感しました。
{3}+$で右側が3の倍数である時のみ、という風に指定すればいいんですね。
スッキリいたしましたm(_ _)m
0244デフォルトの名無しさん
2008/09/20(土) 17:54:15/%a/i にすると「%a」にマッチするんですが /%a5/i のように%の後に2文字以上続けるとマッチしなくなります。
エスケープもうまくいきませんでした。宜しくお願いします
0245244
2008/09/20(土) 17:56:090246デフォルトの名無しさん
2008/09/20(土) 19:30:20"%a5" という3文字にマッチさせたいんだよね?
0xA5 という文字コードの文字じゃなく。
0247デフォルトの名無しさん
2008/09/20(土) 19:57:140248デフォルトの名無しさん
2008/09/21(日) 00:51:45javascript: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になります
どこが間違っているんでしょうか
0249デフォルトの名無しさん
2008/09/21(日) 01:03:10その式をコピペしたけど、IE8βでもFirefoxでもOperaでもマッチしたぞ。
何かテスト方法を間違えてる。
0250デフォルトの名無しさん
2008/09/21(日) 02:59:21という文字列にマッチしたいとき、どう書けばいいのでしょうか?
例:
http://server.www
http://server9.www
http://server999999.www
よろしくお願いします。
0251デフォルトの名無しさん
2008/09/21(日) 03:34:010253デフォルトの名無しさん
2008/09/21(日) 04:02:290254250
2008/09/21(日) 04:51:58風呂入ってきたら自己解決しましま
[|\d]*
0255デフォルトの名無しさん
2008/09/21(日) 04:54:57これは必要なのか?
0256デフォルトの名無しさん
2008/09/21(日) 12:02:25s/\]([^ \.].+)/\] \1/
という正規表現で何故か「従妹」が「従 妹」、「ゾン」が「ゾ ン」という風に
関係ないところまで半角スペースが入ってしまいますが何故でしょうか?
ヘルプを見ると正規表現の仕様は BREGEXP.DLL に準拠すると書かれています
よろしくお願いします
0257デフォルトの名無しさん
2008/09/21(日) 13:33:330258デフォルトの名無しさん
2008/09/21(日) 15:52:50正規表現ライブラリが日本語対応してないんだろうな。
0259デフォルトの名無しさん
2008/09/21(日) 18:45:09他の探すか作者に聞いてみます
0260デフォルトの名無しさん
2008/09/21(日) 22:45:570261デフォルトの名無しさん
2008/09/22(月) 00:13:260262デフォルトの名無しさん
2008/09/22(月) 05:34:17SJISとして扱うのには、 k修飾子をつけるyぷになってるんだが
ちゃんとつけてる?
0263デフォルトの名無しさん
2008/09/22(月) 05:35:300264デフォルトの名無しさん
2008/09/22(月) 11:04:27これだと、henkanに「$&」が文字列としてそのまま渡されてしまいます。
str = Regex.Replace(str, "<a href="".*?"">", henkan("$&"))
perlのeオプションみたいなのは見つけられなかったのですが、
どうすればいいのでしょう?
0265デフォルトの名無しさん
2008/09/22(月) 11:22:09n個のパターンを後方参照で取得したいです。
例えば 'abcde' を
'([a-z])([a-z])([a-z])([a-z])([a-z])'
というパターンであれば 'a', 'b', 'c', 'd', 'e' ととれるのですが
'([a-z])+'
こんなパターンで取得することは不可能でしょうか?
0266256
2008/09/22(月) 17:23:44ありがとうございます! /kで問題なくいけました!
ちゃんと説明読んでなかった自分が恥ずかしいです・・・
0267264
2008/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
0268デフォルトの名無しさん
2008/09/23(火) 18:48:58mbじゃないなら
$ php -r 'preg_match_all("([a-z])","abcdef",$reg);print_r($reg);'
でできるんだよな。
でもそれはどうでもいいんだよな。
0269デフォルトの名無しさん
2008/09/23(火) 21:44:17正規表現で困っています。
<a href="URL">前のページ</a> <a href="URL">次のページ</a>
ここから「次のページ」を囲んでいるAタグのURLを検索したいです
/<a href=\"(.+?)\">次ページ<\/a>/
これだと、前のページのAタグまで含んでしまい困っています。
最左から検索するのが問題だということまでは分かったのですが解決法が分かりません。
/<a href=\"(.+?)\">(?=次)次ページ<\/a>/
こんな書き方もダメでした。
ヒントでもいいので教えていただけませんか?
0270デフォルトの名無しさん
2008/09/24(水) 01:53:37> href=\"(.+?)\"
を
href=\"([^"<>]+?)\"
にでもしたらどーでしょ。
0271デフォルトの名無しさん
2008/09/29(月) 06:47:50http://anond.hatelabo.jp/20080924122353
0272デフォルトの名無しさん
2008/09/29(月) 19:04:52正規表現での一括置換ができる検索置換ラクダv1.01を導入したのですが
表現方法?Perlでの書き方が違うみたいで上手く置換できません.
できればOS9環境で正規表現の連続置換がしたいので検索置換ラクダで可能な
正規表現をPerl初心者の私にどうかアドバイスというか答えを教えてください・・
「全角文字の前後の半角スペースを削除」例= この MPEG は → このMPEGは
{[、-◯ぁ-んァ-ヶ亜-腕弌-熙]}\s 【タブ】 \1
\s{[、-◯ぁ-んァ-ヶ亜-腕弌-熙]} 【タブ】 \1
「全角文字の前後の半角カンマを全角カンマへ」例= あ,あ → b,あ
{[=A-◯ぁ-んァ-ヶ亜-腕弌-熙]}, 【タブ】 \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
0273デフォルトの名無しさん
2008/09/29(月) 19:13:47全角文字を文字範囲で指定するのは、
文字コードに依存するからうまくいかない環境もあると思う。
0274デフォルトの名無しさん
2008/09/29(月) 20:05:20検索置換ラクダとやらが何だか知らんし
Perlのバージョンも分からんが、
多分、単に漢字を文字クラスの中で使えない可能性が極めて高い
例えば、. が漢字一文字にマッチするか試してみればいいが、
多分そうなっていないだろう
0275デフォルトの名無しさん
2008/09/30(火) 09:41:18文字列
<tr>
<td colspan="2"><img height="5" src="http://localhost/aaa.jpg" width="1"></td>
</tr>
<tr>
<td width="100" height="147"><a href="/aaaa/bbbb/" title="hogehoge"><img src="http://localhost/aaa/bbb/ccc.jpg">
この文字列の中のaタグのすぐ後ろのimgタグのURLを取りたく
preg_match("/"<a href=\".*?\" title=\".*?\"><img src=\"(http.*?\.jpg)\">/i", $body, $match);
こうしてみましたが、マッチしません
どのように書けばよろしいでしょうか
0276デフォルトの名無しさん
2008/09/30(火) 10:48:28imgタグの中で、srcは必ず先頭に来る前提でいいのかな。
/<a[^>]+><img src="([^"]+)/
で、$1を取り出す。
0277デフォルトの名無しさん
2008/09/30(火) 11:13:03どうすればいいのでしょうか?
ab cd ef gh
この場合、"ab cd ef"にマッチ。
0278デフォルトの名無しさん
2008/09/30(火) 12:13:17{1}
0279デフォルトの名無しさん
2008/09/30(火) 12:32:32[^ ]+( [^ ]+)*
0280デフォルトの名無しさん
2008/09/30(火) 12:50:20サンクス
うまくいきました
0281デフォルトの名無しさん
2008/09/30(火) 16:09:48できました
ありがとうございました
0282デフォルトの名無しさん
2008/09/30(火) 23:00:39●正規表現の使用環境
サクラエディタ ver.1.6.2.0
●検索か置換か?
検索
●説明
XMLファイルのタグの中を検索したいです
●対象データ
<aaa><bbb>hogehoge</bbb></aaa>
●希望する結果
aaa と bbb と /bbb と /aaa のみ検索される
色分けをしたいのです。
おねがいしまう
0283デフォルトの名無しさん
2008/09/30(火) 23:09:210284デフォルトの名無しさん
2008/09/30(火) 23:11:000285デフォルトの名無しさん
2008/09/30(火) 23:24:06s/松下[電器産業]/パナソニック
でいいですか?
0286デフォルトの名無しさん
2008/09/30(火) 23:29:57s/松下(電器産業)?/パナソニック/ じゃないか
0287デフォルトの名無しさん
2008/09/30(火) 23:40:13できました。ありがとうございました!
0288デフォルトの名無しさん
2008/09/30(火) 23:43:26()はグループ化で
[]は1文字だけか
0289282
2008/10/01(水) 00:16:25理解できたってか調べるのに時間かかりました
(?<=<) これで < が前に存在することを保証する
.*? 任意の文字の連続(最短)
(?=>) > が後に続くことを保証する
283は天才www
チラ裏スマソ
0290デフォルトの名無しさん
2008/10/01(水) 00:18:330291デフォルトの名無しさん
2008/10/01(水) 00:19:44わかりませんサーセン
0292デフォルトの名無しさん
2008/10/01(水) 00:25:560293デフォルトの名無しさん
2008/10/01(水) 04:10:070294デフォルトの名無しさん
2008/10/01(水) 05:53:23お前ここは初めてか?
いいから力抜けよ。
0295デフォルトの名無しさん
2008/10/01(水) 07:12:33むしろお前が初めてか?
空気嫁よ
0296デフォルトの名無しさん
2008/10/01(水) 09:46:510297デフォルトの名無しさん
2008/10/01(水) 10:05:59時代は進んでるな。
0298デフォルトの名無しさん
2008/10/01(水) 11:51:08$str = preg_replace('/(<br \/>|<br>)/i', '<br />', $str);
いろいろやっているうちにチンプンカンプンでしまいには変な顔文字に見えてきて挫折しそうなので
どうかご教授お願いします
やりたい事は$strの中のbrタグが連続して2つ以上あればそれを1つに置き換えたいです
条件として、<br>と<br />を同じ文字列として考えるのと、たまにbrの間に改行コードがあります
<br>\n<br>\n<br /> → <br />
このようにbrタグの間に改行コードがあってもbrタグは連続するものとしたいです
よろしくお願いします
0299デフォルトの名無しさん
2008/10/01(水) 12:13:590300デフォルトの名無しさん
2008/10/01(水) 12:21:01$s="<br>\n<br><br />\ntest<br>\n\n<br />";
$str = preg_replace("/(<br( +\/)?>\n*)+/i", "<br />", $s);
0301デフォルトの名無しさん
2008/10/01(水) 13:19:37望みどおりの処理ができました
ありがとうございました
0302デフォルトの名無しさん
2008/10/03(金) 16:41:07でIPアドレスを取得しようとしてますが、
127.0.0.1 にだけはマッチさせたく無いです。
どうやったらいいですか?
0303デフォルトの名無しさん
2008/10/03(金) 17:16:010304デフォルトの名無しさん
2008/10/03(金) 17:16:18なにがなんでもひとつの正規表現でやらなきゃならない?
0305デフォルトの名無しさん
2008/10/03(金) 17:18:55((((;゚Д゚))))ガクガクブルブル
0306デフォルトの名無しさん
2008/10/03(金) 17:23:05そんなの死んでもイヤです!
0307デフォルトの名無しさん
2008/10/03(金) 17:28:430308デフォルトの名無しさん
2008/10/03(金) 21:02:00$str="192.168.0.1";
preg_match("/(127\.0\.0\.1)?(.*)/",$str,$m);
echo $m[2];
でいけるよな
0309デフォルトの名無しさん
2008/10/03(金) 21:29:360310デフォルトの名無しさん
2008/10/03(金) 23:16:55/\d+\.\d+\.\d+\.\d+/gp
s/うんこ/127.0.0.1/g
0311デフォルトの名無しさん
2008/10/03(金) 23:18:12>308の事なら中身の有無で分岐すればおk
0312デフォルトの名無しさん
2008/10/03(金) 23:19:030313デフォルトの名無しさん
2008/10/03(金) 23:23:170314デフォルトの名無しさん
2008/10/04(土) 00:55:360315デフォルトの名無しさん
2008/10/04(土) 01:04:01エスケープしないと任意の一文字でしたね
0316デフォルトの名無しさん
2008/10/04(土) 01:51:110317デフォルトの名無しさん
2008/10/04(土) 09:19:230318デフォルトの名無しさん
2008/10/04(土) 21:25:17VC++でまともな正規表現やろうと思ったら、ユニコード用の正規表現ライブラリしかないんですかね?
VBAのRegExpコントロールとか、boostのregexとか。
いますごく困ってるのは、VBAのRegExpコントロールを使ってVC++でMBCSプログラミングをしてるんですが、
MatchオブジェクトのFirstIndexプロパティが文字数単位で返ってくることなんですよ。
MBCSだと、バイト単位でどの位置なのか知りたいのに。
もちろん対象となるテキストの先頭から2バイト文字かどうかを調べていけば、
何文字目が何バイト目かを調べることはできるけど、テキストが長くなると処理速度的に満足できない。
ユニコードで何文字目→MBCSで何バイト目を高速に計算するAPIってないですか?
0319デフォルトの名無しさん
2008/10/04(土) 21:43:13何バイト目?ってのは結局頭から見ていくしかないので高速化も難しい
でも長いテキストでも見る開始位置を後ろに持っていくぐらいはできるかな
0320デフォルトの名無しさん
2008/10/04(土) 23:14:36鬼車というのはちょっと見てみましたが、クセがありそうなのでやめときます。
文字数→バイト変換はやっぱり先頭から真面目にカウントするしかなさそうですね。
過去のカウント結果を保持するような文字数→バイトカウント専用のクラスを作って、
同じテキストに関するカウントの高速化をするとか工夫してみます。
0321デフォルトの名無しさん
2008/10/05(日) 10:09:25鬼車以上にクセがあるが。
0322デフォルトの名無しさん
2008/10/06(月) 13:33:23複数のファイルにて、一括複数行置換をしたく、そのために正規表現を使わなくてはなりません。
色々と試してみてもうまく検索されないので教えてください。
<!--shinobi1-->
<script type="text/javascript" src="http://x7.shidareyanagi.com/ufo/ここに9桁の英数字があります"></script>
<noscript><a href="http://x7.shidareyanagi.com/bin/gg?ここに9桁の英数字があります" target="_blank">
<img src="http://x7.shidareyanagi.com/bin/ll?ここに9桁の英数字があります" border="0"></a><br>
<span style="font-size:9px"><img style="margin:0;vertical-align:text-bottom;" src="http://img.shinobi.jp/tadaima/fj.gif" width="19" height="11">
<a href="http://sbc.rentalurl.net" target="_blank">美容整形</a></span></noscript>
<!--shinobi2-->
ファイルにより、上記の中で、「ここに9桁の英数字があります」のところがそれぞれ異なります。
その複数ファイルの中で<!--shinobi1-->から<!--shinobi2-->まで囲まれた部分を検索にかける場合、正規表現ではどう書きますでしょうか?
一括置換ソフトは
複数行置換 を使用しております。
0323デフォルトの名無しさん
2008/10/06(月) 13:37:08<!--shinobi1-->.*<!--shinobi2-->
ではダメなの?
0324デフォルトの名無しさん
2008/10/06(月) 13:39:040325デフォルトの名無しさん
2008/10/06(月) 13:57:09途中にコメントがないなら、<! を避ければいけそう。
0326デフォルトの名無しさん
2008/10/06(月) 19:16:410327デフォルトの名無しさん
2008/10/06(月) 21:30:130328デフォルトの名無しさん
2008/10/06(月) 21:59:530329デフォルトの名無しさん
2008/10/07(火) 08:19:34やり方が分からないってどういう事だ
0330デフォルトの名無しさん
2008/10/07(火) 09:48:570331デフォルトの名無しさん
2008/10/07(火) 10:25:20<a href="http://○○<br><br>○○ target="_blank">△△</a>
<a href="http://○○○○ target="_blank">△<br><br>△</a>
にマッチングして、<br><br>を削除したいのですがどの様な記述になるのでしょうか。
0332デフォルトの名無しさん
2008/10/07(火) 10:28:100333デフォルトの名無しさん
2008/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で取り除きたいのです。
0334デフォルトの名無しさん
2008/10/07(火) 11:22:350335デフォルトの名無しさん
2008/10/07(火) 11:33:58有り難うございます。 <a href=".*?(<br>){2,}.*?</a> と変更しまして、ためしましたと所、
<a href=""></a>○○<br><br>○○<a href=""></a>
にもマッチングしてしまいます。
0336デフォルトの名無しさん
2008/10/07(火) 14:14:500337デフォルトの名無しさん
2008/10/07(火) 14:17:50/(<a href=.+?)<br><br>(.*?>)/$1$2/
もしくは
/(<a href=[^<>]+?)<br><br>(.*?>)/$1$2/
0338デフォルトの名無しさん
2008/10/07(火) 17:13:07有り難うございます。
会議が入ったので取り敢えずの中間報告です。どちらも100件の小さいログサンプルでは、
<a href="○○<br><br>○○></a>にはちゃんと働いてくれました。
良い感じだったのですが、<a href="△△">○○<br><br>○○</a>□□<a href="・・・
とリンク文字間に<br><br>が有る場合は反応いたしませんでした。
0339デフォルトの名無しさん
2008/10/07(火) 20:37:43それを活用するといいよ
0340デフォルトの名無しさん
2008/10/15(水) 17:14:420341デフォルトの名無しさん
2008/10/17(金) 20:22:59条件はどう表現するのでしょうか。
^\s+\n と ^\s*$ を組み合わせる事で表現出来たような気したんですが
------
a
------
もマッチしてしまいます。
0342デフォルトの名無しさん
2008/10/17(金) 20:46:45^\s+$ か ^\s*$で通常なら事足りるはず
メソッドの使い方間違えてるかもしれないから
とりあえずC#のコード貼ってみて
0343デフォルトの名無しさん
2008/10/17(金) 21:55:13親切に有り難う御座います。
^\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;
}
}
0344デフォルトの名無しさん
2008/10/24(金) 04:23:35●正規表現の使用環境
boost regexを使用した「Flexible Renamer」というファイルリネームソフト
●検索か置換か?
置換
●説明
[aaaa][bbbb].xxx などとなっているファイル名の最初の[]だけを()に変えたい
(aaaa)[bbbb].xxx となるようにしたい
ソフトがバグっている可能性もあるのですが、いろいろやったけどできません。
0345デフォルトの名無しさん
2008/10/24(金) 04:28:040346デフォルトの名無しさん
2008/10/24(金) 07:52:39できないのはソフトのバグではない
じゃあ何の所為なんだろうね
0347デフォルトの名無しさん
2008/10/24(金) 11:11:02�d
やっぱりできませんでした
どうもソフト自体が正規表現を受け付けないみたい、説明にもヘルプにもできるって書いてあるのになー
別のフリーソフト探します
0348デフォルトの名無しさん
2008/10/24(金) 11:56:110349デフォルトの名無しさん
2008/10/24(金) 12:11:36検索:^(.*?)\[(.*?)\](.*)$
置換:\1(\2)\3
で動作したが。
0350346
2008/10/24(金) 12:18:31ソフトの使い方とか予想外だった
0351デフォルトの名無しさん
2008/10/27(月) 09:42:10正規表現だけに頼らず、HTMLをパースするしかないんでしょうか?
<div class="1">
あああ
<div class="2">いいい</div>
</div>
↑この、<div class="2"> があろうとなかろうと、<div class="1"> に対応する</div>までをマッチさせたい
0352デフォルトの名無しさん
2008/10/27(月) 10:23:24その例みたいに、「divのみで2重まで」とか条件があればまだしも。
0353デフォルトの名無しさん
2008/10/27(月) 11:17:410354デフォルトの名無しさん
2008/10/27(月) 13:40:07それで苦労ないんだけどなw
0355デフォルトの名無しさん
2008/10/28(火) 01:02:350356デフォルトの名無しさん
2008/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/;
}
0357デフォルトの名無しさん
2008/10/28(火) 11:17:52半角の空白のみを含まない場合は、どうやって表現したら良いでしょうか
お願いします。
0358デフォルトの名無しさん
2008/10/28(火) 12:25:44アスキーコード表を眺めてみましょう。
0359デフォルトの名無しさん
2008/10/28(火) 12:38:16ありがとうございました『[\x21-\x7E]』でいけました。
ところで、vb2008のRegexクラスでは、^による否定ってできないのでしょうか
0360359
2008/10/28(火) 13:01:210361デフォルトの名無しさん
2008/10/29(水) 18:31:37数字4桁で後ろに
何もない
ハイフンが1個
ハイフンと小文字のアルファベットa-z
の3パターンにマッチするには、どう書けばいいのでしょうか
例
1234
2345-
7896-d
0362デフォルトの名無しさん
2008/10/29(水) 19:21:52>>2あたりは一通り読んだのか?
0363デフォルトの名無しさん
2008/10/29(水) 21:45:540364デフォルトの名無しさん
2008/10/30(木) 01:04:02Flash-ActionScript 3.0で正規表現を用いて、テキスト中の
1.2345
-0.1234
10.5678
といった数値を抽出しようと思いますが、この場合の小数点の扱いはどのようになるのでしょうか?
テストで .[0-9] (小数点とその右の数値を抽出)を行ったところ、e1 というコードが現れ、
全く出鱈目な結果を得ました。
(ActionScript3.0で「.」は任意の1文字なので仕方ないのですが・・・)
Flashの場合に限らず、小数点を含む類似のサンプルがありましたらご紹介下さい。
0365デフォルトの名無しさん
2008/10/30(木) 01:07:55任意の一文字を表す . を \ でエスケープすれば
. そのものになると思うよ
0366364
2008/10/30(木) 01:31:46早速のレス有難うございます。
たった今、手元の本で見つけたのですが、 . はAsciiコードで \x2E と表現するということなので、
これで試しましたが駄目でした(Unicode表記 \u002E でも駄目でした)
半角マイナス(\x2D)やスラッシュ(\x2F)は問題なく抽出できたのですが・・・
0367デフォルトの名無しさん
2008/10/30(木) 02:06:44そのオブジェクトとどうやってマッチさせたのかわかるコードを貼ってみて
もし前者で new RegExp("\x2E[0-9]") とかしてるとややこしいことになる
正規表現リテラル /\x2E[0-9]/ や /\.\d/ なら期待通りに動くはず
0368デフォルトの名無しさん
2008/10/30(木) 02:54:50なんて手もある。
一文字多いけど、 \ の扱いが面倒な状況だと役に立つかも。
0369364
2008/10/30(木) 22:42:15試してみました。コードの構成は以下の通りで、マウスクリックでのアクションです。
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 = /〜/; の形が良いようです。
アドバイス、有難うございました。
0370デフォルトの名無しさん
2008/10/31(金) 01:02:32最後のやつはダブルクォート中のエスケープだから実態は“.d”で
任意の1文字+dで解釈されたと思われる
それをするなら“\\.\\d”だろうか
どうも「\でエスケープ」の意図が伝わってなかった気がするね
できたんならよしとすればいいけど
0371デフォルトの名無しさん
2008/10/31(金) 06:50:23// ASコンパイラは文字列「ドット、次に d 」と解釈
"\.\d"
// 正規表現コンパイラは文字列「ドット、次に d 」を元に正規表現を作成
// 結果、任意の一文字に続いてdが来る文字列にマッチする正規表現が出来上がる
new RegExp("\.\d", "g");
こういうのにはまったら、ASコンパイラと正規表現コンパイラの二者が
(概念的には)存在することを思い出すといいんじゃないかと思う
もちろん、とりあえず正規表現リテラル /.../ 使っとこう、でも構わない
あと >>369 のコード中の str に文字列 od が含まれていないか確認を
0372364
2008/11/01(土) 11:41:13すいません、レス遅くなりました。
ここに貼った var str:String は元が長いので、途中を省略したもので、コード上の元の
文字列には確かに od が入っています。
AS3.0の new RegExp("\.\d", "g"); だと、od(〜d) が対象になるのかなあ・・・・
0373デフォルトの名無しさん
2008/11/03(月) 18:48:42PHP4.3.11
●検索か置換か?
検索
●説明
CSVファイルを「,」で分離したいが、
「"」で囲まれているフィールドに関しては「,」で分離したくない
●対象データ
AB,BC,"CD,DE,EF",FG
●希望する結果
(1)AB
(2)BC
(3)"CD,DE,EF"
(4)FG
すいません、基礎的な質問かと思いますが
お分かりになる方がいらしたらよろしくお願いいたします。
0374デフォルトの名無しさん
2008/11/03(月) 19:47:44プログラムで対処が一般的
0375デフォルトの名無しさん
2008/11/03(月) 21:01:42PHPなら専用の関数が元からあるだろう?
0376デフォルトの名無しさん
2008/11/03(月) 21:31:19Ruby1.8
●検索か置換か?
置換
●説明
ファイル名の頭から指定の文字列Xまでをなくす
●対象データ
例)指定の文字列X → "test"
ドラゴンボールtestあいうえお.txt
あああいいいtest.txt
●希望する結果
testあいうえお.txt
test.txt
0377デフォルトの名無しさん
2008/11/03(月) 21:35:30"aaaiiitest.txt".slice(/test.*/)
0378デフォルトの名無しさん
2008/11/03(月) 21:40:120379デフォルトの名無しさん
2008/11/08(土) 09:49:48Perl v5.8.8
●検索か置換か?
検索
●説明
F1という文字列が含まれていたらヒットさせたい
ただしF1の前にFが付いている場合はヒットさせたくない
●希望する動作
"F1 ほげほげ" →真
"FF11 ほげほげ" →偽
[^F]F1
[^F]?F1
などと試して見ましたが失敗でした
0380デフォルトの名無しさん
2008/11/08(土) 10:11:16これでうまくいきました
^F1|[^F]F1
0381デフォルトの名無しさん
2008/11/08(土) 14:32:31(?<!F)F1
0382デフォルトの名無しさん
2008/11/08(土) 14:36:05http://codezine.jp/article/detail/3039
http://codezine.jp/article/detail/2676
0383デフォルトの名無しさん
2008/11/09(日) 06:56:57それは否定先読み
0384デフォルトの名無しさん
2008/11/09(日) 07:01:53(?<=aaa)bbb 直前にaaaがくるbbbにマッチ(先読み)。
(?<!aaa)bbb 直前にaaaがこないbbbにマッチ(否定先読み)。
aaa(?=bbb) 直後にbbbがくるaaaにマッチ(戻り読み)。
aaa(?!bbb) 直後にbbbがこないaaaにマッチ(否定戻り読み)。
0385デフォルトの名無しさん
2008/11/09(日) 07:04:380386デフォルトの名無しさん
2008/11/10(月) 09:18:59lex
●検索か置換か?
検索 ?
●説明
C言語のコメントで使われるような書式の検索
/*で始まり*/で終わるような文
ただし途中で*/は出現しない
漢字コードはEUCです。
コメントが英数字だけならできそうなのですが
漢字などが入ってくるとよくわかりません。
よろしくお願いします。
0387デフォルトの名無しさん
2008/11/10(月) 10:47:44問題ないのでは?
0388デフォルトの名無しさん
2008/11/10(月) 11:20:03できれば正規表現を教えてもらえないでしょうか?
英数字は[a-zA-Z0-9]のようにできると思いますが
ひらがなやカタカナは[あ-んア-ン]のようにはやはりできませんよね?
文字コードで書くのでしょうか。。。。
0389デフォルトの名無しさん
2008/11/10(月) 11:21:52この場合、正規表現にひらがなやカタカナを書く必要ないでしょう?
0390デフォルトの名無しさん
2008/11/10(月) 11:40:01コメント/**/の中にひらがなやカタカナ、漢字、英数字がでて来ると思うのですが
必要ないのでしょうか?
例として
「/*(A|***B)*/」
Aは「*、/」以外の文字を表しBは「/」以外の文字を表す。
演算の*と混乱をさけるためアスタリスクは全角大文字にしているが
実際は半角にする。
このAとBを表したいのですが。。。。
例えば[0-9a-zA-z(漢字コード?)^/*(/と*を除く)]のようにすればいいのでしょうか?
0391デフォルトの名無しさん
2008/11/10(月) 12:15:380392デフォルトの名無しさん
2008/11/10(月) 13:04:37目的は、コメント中の「*」を「*」にすること?
0393デフォルトの名無しさん
2008/11/10(月) 13:19:29すみません、質問の仕方が悪かったです;
>>392
いえ、「/*(A|***B)*/」の「*」は本当は「/*(A|xx*B)*/」
とかけてC言語ではかけるの「x」は「*」で、
正規表現の0回以上繰り返す「*」とかぶってしまうため
「/*(A|***B)*/」とかかないで「/*(A|***B)*/」と書いていると思います。
何がしたいのかはlexを使って字句解析をしたいのですが
コメントの部分をスルーするための正規表現の仕方がしりたいのです。
0394デフォルトの名無しさん
2008/11/10(月) 13:25:36途中は読み飛ばせばいいような気がするんだけど、そうじゃないの?
0395デフォルトの名無しさん
2008/11/10(月) 13:29:59それでEUCコードの部分で引っかかるようなら改良すればいい。
0396デフォルトの名無しさん
2008/11/10(月) 13:40:590397デフォルトの名無しさん
2008/11/10(月) 13:45:57コードで書くのは簡単なんだが、正規表現にするには独特のコツがいるという
タイプの問題なので、下手にこだわるよりさっくり問題そのものを別の方法で
解決してしまったほうが早い。
0398デフォルトの名無しさん
2008/11/10(月) 13:58:13/* -> COMMENT状態に遷移
*/ -> 戻す
でいいんじゃね
0399デフォルトの名無しさん
2008/11/10(月) 14:03:53/*と*/を検知するには
{^/*}{/*$}のような感じでいいのでしょうか?
行が複数行になったらおかしくなりませんんかね。。。。。
0400デフォルトの名無しさん
2008/11/10(月) 14:28:50別の板の正規表現スレで似た話があったから、その続きかと思った。
量指定子を+と*で書くと、
/*([^*]|*+[^/*])**+/
となる。
0401デフォルトの名無しさん
2008/11/10(月) 15:03:37回答ありがとうです<(_ _)>
よく考えて見ます。。
ちなみにマルチはしていません@@
0402デフォルトの名無しさん
2008/11/10(月) 22:36:25対応するの大変だから生成されたパーサだけ使用して、スキャナは自前実装がお勧め。
0403デフォルトの名無しさん
2008/11/11(火) 04:08:42Excel & 正規表現検索
※ ttp://srcedit.pekori.jp/tool/excelre.html
●検索か置換か?
置換
●説明
英単語のみ先頭文字を小文字化
●対象データ
One
Two
Three3
●希望する結果
one
^
two
^
Three3
^^^^^^^
○自分の経緯
検索:(^[a-z])([a-z]*)
置換:[LOWER]$1$2
結果:One ⇒ [LOWER]One
○知りたいこと
このアドインにある「特殊置換」を利用する際の文法
以上、お願いいたします。
0404デフォルトの名無しさん
2008/11/11(火) 10:08:450405デフォルトの名無しさん
2008/11/11(火) 18:18:150406デフォルトの名無しさん
2008/11/12(水) 05:26:090407403
2008/11/12(水) 05:43:220408デフォルトの名無しさん
2008/11/12(水) 20:14:38もう一度読んでみるのが怖い
0409デフォルトの名無しさん
2008/11/12(水) 20:43:19特殊置換は変換後にそれだけしか書けないんじゃない?
とりあえず変換するだけなら↓でいけないか
変換前:^[a-z]+$
変換後:[LOWER]
0410デフォルトの名無しさん
2008/11/13(木) 00:28:30検索: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
(省略されました続きを読むにはここをクリックしてください)
0411デフォルトの名無しさん
2008/11/14(金) 12:10:39Repl-Ace
※ ttp://www.sirmiles.com/repl_ace/
●検索か置換か?
置換
●説明
testA
きょう
あした
testEndA
や
testA
あした
あさって
しあさって
testEndA
のようなtestAからtestEndAで囲まれている文字列(改行あり)を特定文字列に置換
●希望する結果
testA
1週間前
2週間前
testEndA
0412デフォルトの名無しさん
2008/11/14(金) 14:23:210413デフォルトの名無しさん
2008/11/14(金) 14:52:11パターン testA\n.*?testEndA\n
置換文字列 testA\n1週間前\n2週間前\ntestEndA\n
でいいのか?
何を期待してるのだかよくわからんが...
0414デフォルトの名無しさん
2008/11/14(金) 14:59:430415デフォルトの名無しさん
2008/11/14(金) 19:38:18あんな人になるには一体どうすればいいんだろうか?
0416デフォルトの名無しさん
2008/11/14(金) 20:57:270417デフォルトの名無しさん
2008/11/14(金) 21:46:380418デフォルトの名無しさん
2008/11/14(金) 23:15:54表現に正規も糞もあるか!
0419デフォルトの名無しさん
2008/11/14(金) 23:20:450420デフォルトの名無しさん
2008/11/15(土) 00:25:47では何が良いかといわれると、判らない。
明治時代の人々は、偉大だった。
0421デフォルトの名無しさん
2008/11/15(土) 02:38:54アテ字と言って過言ではない。意味を深く考える必要は無い。
0422デフォルトの名無しさん
2008/11/15(土) 02:39:300423デフォルトの名無しさん
2008/11/15(土) 02:53:000424デフォルトの名無しさん
2008/11/15(土) 02:54:530425デフォルトの名無しさん
2008/11/15(土) 13:49:350426デフォルトの名無しさん
2008/11/15(土) 17:37:48まあ今時の言語で使えるような正規表現はもはや正則言語で表現できる範囲を
越えてたりするんだけどね
0427デフォルトの名無しさん
2008/11/15(土) 19:05:570428デフォルトの名無しさん
2008/11/15(土) 22:00:13「♪ヤッホー FORTRANランラン」並みに手垢が付いたネタだな。
0429デフォルトの名無しさん
2008/11/15(土) 22:07:24>手垢が付いたネタ
つまりエロ本のことだな
0430デフォルトの名無しさん
2008/11/16(日) 14:47:16"あるマックなどPCがあり、マックなどのコンピュータ"
の文字列から、/マックなどの?(.+)/のような正規表現で、「PCがあり、」「コンピュータ」の文字列を
取得したいのですが、うまくいきません。この場合、どのようにするのがよいのでしょうか?
よろしくお願いいたします。
0431デフォルトの名無しさん
2008/11/16(日) 18:58:39環境を書け
0432デフォルトの名無しさん
2008/11/16(日) 19:46:200433デフォルトの名無しさん
2008/11/16(日) 19:51:090434デフォルトの名無しさん
2008/11/16(日) 20:14:40430です。
Ruby 1.8.6、UTF8です。
お願いします。
0435デフォルトの名無しさん
2008/11/16(日) 20:18:42ほら、質問者が環境書いたぜ。
「出来ない」 って答えろよ。
0436デフォルトの名無しさん
2008/11/16(日) 20:21:20文字列を切り取るには、何が必要だ?
どこから、どこまで。スタートとエンドだ。
/マックなどの?(.+)/
これにはスタートはあるが、エンドが無い。
どこまで切り取ればいいのか不明なんだよ。
どこから・・・マックなどの?
どこまで・・・ ←これを決めろ。
0437デフォルトの名無しさん
2008/11/16(日) 20:46:51何なんお前
建設的なレスできないなら無駄なレスすんなよ
0438デフォルトの名無しさん
2008/11/16(日) 20:49:370439デフォルトの名無しさん
2008/11/16(日) 20:51:200440デフォルトの名無しさん
2008/11/16(日) 21:02:54str = "あるマックなどPCがあり、マックなどのコンピュータ"
re = /あるマックなど(PCがあり)、マックなどの(コンピュータ)/
puts re.match(str).to_a[1..2]
0441デフォルトの名無しさん
2008/11/16(日) 21:13:42氏ね
0442デフォルトの名無しさん
2008/11/17(月) 08:23:200443デフォルトの名無しさん
2008/11/17(月) 09:34:46状態を持つ物なら、何らかのプログラミング言語を使わないと。
0444デフォルトの名無しさん
2008/11/17(月) 13:32:290445デフォルトの名無しさん
2008/11/17(月) 15:33:30最初に訳した人が誰かは知らないが、regularの捉え方を間違えている。
正しいではなく、普通のと言う意味あいで(例:レギュラーガソリン)
汎則式とでもしておけば、初学者の違和感も起きないものを…
0446デフォルトの名無しさん
2008/11/17(月) 15:43:210447デフォルトの名無しさん
2008/11/17(月) 17:07:420448デフォルトの名無しさん
2008/11/18(火) 00:23:42●正規表現の使用環境
サクラエディタ ver.1.6.2.0
●検索か置換か?
置換
●説明
フルパスが記述されたテキストファイルをとあるソフト(画像ビューアのHamana)のリストファイルにしたい
●対象データ
C:\Program Files\Windows Media Player\wmplayer.exe
●希望する結果
D=C:\Program Files\Windows Media Player\
F=wmplayer.exe
行末の直前の\を置換すればいいのかな?と思ったのですが
指定の仕方がわかりませんでした・・・
0449デフォルトの名無しさん
2008/11/18(火) 00:40:18置換前:^(.*\\)(.*?)$
置換後:D=\1\r\nF=\2
0450デフォルトの名無しさん
2008/11/18(火) 01:03:03ありがとうございました
0451デフォルトの名無しさん
2008/11/18(火) 12:09:47</img width="120" height="180">
<img width="120" height="180"/>
という文字列をすべて
width="120" height="180"
width="120" height="180"
width="120" height="180"
にしたいのですが秀丸の置換で
検索→.* (.*)[/>].*$
置換→\1
とやってるのですが
width="120" height="180"
width="120" height="180"
width="120" height="180"/
と、さいごのスラッシュが消えません。
是非助言をください!・・・もう何時間もやってるんです(汗
0452デフォルトの名無しさん
2008/11/18(火) 12:14:47でいけました!お手数おかけしました!
0453デフォルトの名無しさん
2008/11/20(木) 09:31:33●正規表現の使用環境
Windows上で動く「Perl5の正規表現と互換性のある」とマニュアルに書いてある
フリーの(今はシェアになっています)クリップボード拡張ソフト
マニュアルには、参考事例として
・複数行のテキストに含まれている空白記号をすべて削除する
[@ s/[ ¥t ]//gmk]
・複数行のテキストに引用記号をつける
[@ s/^/> /gmk]
などが書かれています。
●検索か置換か?
置き換え です。
●説明
窓の杜などからソフトウェアのファイルをダウンロードするときに、
そのソフトをレビューした記事のタイトルをダウンロード先フォルダの名前にしています。
しかし、記事からタイトルをコピーして、フォルダ名としてペーストするだけでは
「ファイル名には次の文字は使えません。」という警告をWindowsから受けてしまうことが頻繁にあります。
Windowsでフォルダ名に使えない文字を削除しつつ、無意味な連続する空行を削除し、
ペーストしただけでフォルダ名として使える文字列へと変換できる正規表現を考えていただけないでしょうか?
0454453
2008/11/20(木) 09:34:37「改行」
Moo0 オーディオ再生器「改行」
コンパクトで軽快に動作し、直感的に操作できるオーディオプレイヤー「改行」
「改行」
for Windows「改行」
●希望する結果1 (フォルダ名に改行を使えないので、全ての改行をアンダースコアに置き換えつつ1行の文字列へ)
_Moo0 オーディオ再生器_コンパクトで軽快に動作し、直感的に操作できるオーディオプレイヤー_for Windows
(先頭のアンダースコアはあってもなくても構いませんが、無い方がうれしいです)
●対象データ2
シンプルかつ高機能な音楽プレイヤー
foobar2000
バージョン【0.9.5.6】
●希望する結果2 (ここまでの変換に加え、連続する空白、TABをひとつのアンダースコアに置き換えつつ、さらに末尾の空白を削除)
シンプルかつ高機能な音楽プレイヤー_foobar2000_バージョン【0.9.5.6】
●対象データ3 (○アールはregistration symbolと呼ぶらしい丸の中のRなのですが、打てませんでした。)
1.
Intel○アール Graphics Media Accelerator Driver for Windows* XP (exe) (20476KB)
14.36.4.5002 2008/10/24
●希望する結果3 (ここまでの変換に加え、registration symbolを(R)へ、フォルダ名に使えない文字/をハイフンへ)
1.Intel(R) Graphics Media Accelerator Driver for Windows* XP (exe) (20476KB)_14.36.4.5002_2008-10-24
0455453
2008/11/20(木) 09:35:51\ / : , ; * ? " < > | および 改行
とのことなので、これらを含まない形へ整形できたらと思います。
これらを一度に処理することが、正規表現で可能なのかどうかも分からないのですが、
もし、できそうなら、どなたか編み出してもらえないでしょうか?
よろしくお願いします。
0456デフォルトの名無しさん
2008/11/20(木) 13:49:38s/[\\\/:,;*?"<>|]/_/g
みたいな。細かい改良点は自分で考えなよ。
0457デフォルトの名無しさん
2008/11/23(日) 00:32:05[2バイト文字]
↑このパターンを
………[2バイト文字][2バイト文字]
にするにはどう書けばよいでしょうか?
0458デフォルトの名無しさん
2008/11/23(日) 02:19:430459デフォルトの名無しさん
2008/11/23(日) 02:39:08テンプレくらい読め。
それにそんだけじゃ情報が足りなすぎだ。
どうせ元データは何百行とあるんだろう?
どういう行とどういう行を連結したいのか位は明確にしろ。
0460デフォルトの名無しさん
2008/11/26(水) 05:14:10Devas 3.4
●検索か置換か?
置換
●説明
各行先頭にある
空白4つと数字(1から85)、ピリオドを抜き出したい
例えば
1. 120.136.16.13:3128
2. 94.178.64.37:48018
79. pps.nntime.com:554
このようなIP+Portの前にある文字列のことです。
●対象データ
1.
85.
0461デフォルトの名無しさん
2008/11/26(水) 05:28:19もし空白やドットが不要で通し番号だけ拾うのなら、
ツールにもよるけど ^ *(\d+)\. とか適当にアレンジして試しておくれ
0462デフォルトの名無しさん
2008/11/26(水) 06:36:22それ、置換なの?
0463デフォルトの名無しさん
2008/11/26(水) 10:02:54ありがとうございました!
^ *(\d+)\.
これでIPとPortだけに置換することができました。
0464デフォルトの名無しさん
2008/11/27(木) 15:26:32●正規表現の使用環境
Flexible Renamer(Perl5互換)
●検索か置換か?
置換
●説明
ファイル名の一部を別の位置へ移したい。
●対象データ
(日付)(場所)hogehoge というフォルダ名や (日付)(場所)hogehoge,jpgというファイル名
●希望する結果
(日付)hogehoge(場所)や(日付)hogehoge(場所),jpgというようにしたい。
0465デフォルトの名無しさん
2008/11/27(木) 15:29:210466デフォルトの名無しさん
2008/11/27(木) 15:41:400467デフォルトの名無しさん
2008/11/27(木) 15:56:360468デフォルトの名無しさん
2008/11/27(木) 16:03:16s/^(\(.+?\))(\(.+?\))(.+)(\..+)?$/$1$3$2$4/
0469デフォルトの名無しさん
2008/11/27(木) 16:43:45自分の悩んだ時間などウソのようにすっきり成功してしまいました。
今までも正規表現を使いたいと思って色々サイトを巡ったのですが
今回の答えも答えをもらって、見れば分かるぐらいの理解しかないのです。
良い学習サイトなどがあれば教えてくれませんか?それともオライリーの本を買うべき?
0470デフォルトの名無しさん
2008/11/27(木) 16:45:58俺はこのスレでROMって勉強してる
0471デフォルトの名無しさん
2008/11/27(木) 16:47:49一冊読んだ方がその後が楽になる
0472デフォルトの名無しさん
2008/11/27(木) 17:29:37(カッコのエスケープ、最短マッチ、後方参照あたり)
もしプログラミングの経験がなければ、そっちを補ったほうがいいと思う。
正規表現も一緒に学べる『初めてのPerl』『たのしいRuby』あたりお勧め。
リネーマーも自分で作れるよ。
0473デフォルトの名無しさん
2008/11/27(木) 17:49:46プログラムはPHPぐらいで、しかも正規表現がどうしても必要な場面に
遭遇した事がありません。
これからこのスレをROMったり、挙げてもらった本も入門書のようですので
探して見て勉強してみようと思います。
ありがとうございます。
0474デフォルトの名無しさん
2008/11/29(土) 10:49:002ch のレスの
>>***
を、テキストエディタを用いて
#aa(){{{>>***}}}
に置換したいのですが、方法はありますでしょうか?
0475デフォルトの名無しさん
2008/11/29(土) 10:56:30もし全部固定なら、そのままエディタの置換機能を使えば済む。
>>5を見て、対象データの例と希望する結果を書いてくれ。
0476デフォルトの名無しさん
2008/11/29(土) 12:56:55ありがとうございます。わかりにくい表現で申し訳ありません。
↓が対象データの例と希望する結果です。
●対象データ
>>123
>>456
●希望する結果
#aa(){{{>>123}}}
#aa(){{{>>456}}}
0477デフォルトの名無しさん
2008/11/29(土) 13:01:41検索 >>(\d+)
置換 #aa\(\)\{\{\{>>$1\}\}\}
0478デフォルトの名無しさん
2008/11/29(土) 13:18:38$1 のところを \d+ や (\d+)、$\d+、$(\d+) に変えて色々やってみましたが
ダメでした。置換には EmEditor Pro 7.02 を使っていますが、
何かやり方が誤っているでしょうか?
#aa(){{{>>$1}}}
#aa(){{{>>$1}}}
0479デフォルトの名無しさん
2008/11/29(土) 13:37:140480デフォルトの名無しさん
2008/11/29(土) 14:31:04後方参照を $1 ではなく \1 で行う
置換 #aa\(\)\{\{\{>>\1\}\}\}
0481デフォルトの名無しさん
2008/11/29(土) 14:49:18お返事遅れました。
すっげwマジで出来たw 正規表現って本当にすごいですね。
自分は \t や \n 等、基本的なものしかわからなかったのですが、
今回の質問が非常に勉強になりました。
次に疑問が湧いた時には、正規表現でできないことはないという姿勢で
解決に望もうと思います。
ありがとうございました。
0482デフォルトの名無しさん
2008/11/29(土) 14:49:51その括弧のエスケープはなんかいみあるの?
0483デフォルトの名無しさん
2008/11/29(土) 14:55:12ちなみに、今回の置換の目的なのですが、
atwiki という wiki のページで
>
のような特殊文字を書くと、
適切に表示がされない不具合(?)があるので、
アスキーアート表示用のメソッド
#aa(){引数}
を用いて、> を囲みたいなと思ったのが目的でした。
初めは手動でやっていたのですが、あまりにも数が多いので
置換化できないかな、と思った次第です。
長文失礼いたしました。
0484480
2008/11/29(土) 15:01:52置換 #aa(){{{>>\1}}}
こうだね。 吊ってくる
0485デフォルトの名無しさん
2008/11/29(土) 16:21:23小かっこ () って、正規表現モードでも \ をつける必要ないんですか。
勉強になりました
0486デフォルトの名無しさん
2008/11/29(土) 16:29:35置換文字列は正規表現じゃないというだけ。
正規表現で書かなきゃいけないところで()そのものを書くには
エスケープする必要がある。
0487デフォルトの名無しさん
2008/11/30(日) 13:46:28.NET FrameworkのRegexクラス。
ですが、Perlなどの正規表現でもかまいません。
●検索か置換か?
検索です
●説明
エスケープ記号(\)がついていない括弧で囲まれた文字列の検索が目的です。
[^\\]\((?<content>[^\(]+[^\\])\)という正規表現で試したところ、
入力文字列"a(b)"で正しくマッチし"a\(b)"や"\(b)"で正しくマッチしないのですが、
"(b)"では本来マッチしてほしいのにできなくなります。
●対象データ
エスケープ文字がついてないカッコで囲まれた文字列
●希望する結果
マッチ: "a(b)", "(b)"
非マッチ: "\(b)", "a\(b\)", "a(b\)"
0488487
2008/11/30(日) 14:12:51で解決しました。
0489デフォルトの名無しさん
2008/11/30(日) 14:16:290490デフォルトの名無しさん
2008/12/03(水) 17:36:22aaa778ああああ
aaa7
aaa7あああ
aaa7aaa8
aaa7 aaa8
目的はaaa7をbbb7に置き換えたい。
しかしマッチ方法で苦しんでいます お助けを・・
/aaa7/ これでは全部置き換わる
/aaa7[^\d]/これでは 下の3つが余計な部分含めてマッチしてしまう。。
下から4つ、aaa7のみマッチさせる方法はあるでしょうか。
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
ここで簡単に調べられるのですが宜しくお願いします。
Perl互換の正規表現にチェックをいれていただけるといい感じです。
0491デフォルトの名無しさん
2008/12/03(水) 17:46:49/aaa7(?=[^\d])/
次からは>>5でお願い。
0492デフォルトの名無しさん
2008/12/03(水) 17:48:08そのチェッカーとやらの使い方がよくわからんので試してないが。
(?=ほげ) で先読みが、\Z で改行または文字列末にマッチ、ができることを
前提としている。
何を使っているのかよくわからないが(PHPのPerl互換モード?)
先読みと改行と文字列末の扱いを確認してみること。
0493デフォルトの名無しさん
2008/12/03(水) 17:50:470494490
2008/12/03(水) 18:28:57もうしわけないです次から気をつけます。
>>491-493
ふむふむ 先読みという事ができるのですね
結果うまくいきました!ありがとうございました。
先読みと改行と文字列末 これを詳しく勉強してみます。
0495デフォルトの名無しさん
2008/12/03(水) 18:31:18こう読んだけど違うのかな
s/aaa(?=7)/bbb/
>>494が来てたのでもういいみたいだけど
0498デフォルトの名無しさん
2008/12/06(土) 21:09:48ttp://pc11.2ch.net/test/read.cgi/tech/1227521785/607
から来ました
C#でRegexを使って正規表現を利用しています
if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx", @"\s+((\w+\.?)+)$").Success)
{
Console.WriteLine("True!");
}
else
{
Console.WriteLine("False!");
}
Console.WriteLine("カンマあり");
if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx,", @"\s+((\w+\.?)+)$").Success)
{
Console.WriteLine("True!");
}
else
{
Console.WriteLine("False!");
}
マッチする場合は後で ((\w+\.?)+)$ の部分について処理をして、マッチしない場合はそのまま次にいくようにしたいのですが
このパターン文字列だと上記のような文字列でカンマが末尾にある場合はfalseが返ってくるまで異常に時間がかかってしまいます
最終的に ((\w+\.?)+)$ 出マッチする場合とと同じ文字列が得られる、末尾にカンマが合っても処理が遅くならないパターンがあれば教えてください
0499デフォルトの名無しさん
2008/12/06(土) 22:50:00(\w+)+ みたいな感じになるから遅いんだろうねえ。
\s+\w+(\.\w+)*$
でどうか。
0500デフォルトの名無しさん
2008/12/06(土) 22:50:51\s+(\w+(\.\w+)*)$
こうか。
0502デフォルトの名無しさん
2008/12/07(日) 03:52:21> (\w+)*は良くても(\w+)+は遅くなるんですね
んー、そういうことではないぞ。
\.? は有っても無くてもいいけど、(\.\w+)* の \. は必要でしょ。
(\.?\w+)* にしたらやっぱり遅くなるはず。
(\w+\.?)+ は「.xxxxxx」だけにも何通りもマッチの仕方があるけど、
(\.\w+)*は1通りしかマッチできない。この違いだよ。
0504デフォルトの名無しさん
2008/12/07(日) 13:53:02なんかまだ誤解してるっぽいな。
*)*
みたいに、カッコの内側の最後に繰り返し指定(*やら+やら)があって、
その外側すぐにも繰り返しがあるのが問題(になることが多い)。
498が最初に書いたようなマッチしないデータを食わせたときに、
バックトラック回数がとんでもなくでかくなって遅くなる(可能性がある)。
0506デフォルトの名無しさん
2008/12/07(日) 20:39:26外国語の翻訳に使えそうな気がするんだけど、その観点での研究って進んでないの?
0507デフォルトの名無しさん
2008/12/07(日) 21:38:53yaccやbisonで実用になる翻訳ソフトが作れるって話は聞かないから。
0508デフォルトの名無しさん
2008/12/07(日) 21:53:34正則言語はそんなに広いクラスじゃないぞ
0509デフォルトの名無しさん
2008/12/07(日) 21:56:51一般の自然言語と正規言語では言語のクラスとして天と地ほどの差があるよ。
たとえば、多くの自然言語は無限回のネストを許容するが、これは正規文法で表せない。
0510デフォルトの名無しさん
2008/12/08(月) 08:03:550511デフォルトの名無しさん
2008/12/08(月) 11:28:010512デフォルトの名無しさん
2008/12/08(月) 11:45:240513デフォルトの名無しさん
2008/12/09(火) 18:38:31PHP4.4以降
●検索か置換か?
検索後、個々に置換
●説明
ユーザーが入力したhtmlデータ内に
特定の文字で囲まれたものを変換したい。
%test%や%nullpo%など。
●対象データ
フォームで送信されたhtmlデータ
<html>
<head>
</head>
<body>
%adv%
あいうえおかきくけこ<br>
%adv%
</bnody>
</html>
●希望する結果
%adv%を発見した位置を返し、それを指定された文字列で置換する。
%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。
よろしくお願いします。
0514デフォルトの名無しさん
2008/12/09(火) 19:41:55>%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。
この時点で、正規表現でやるのには無理がある。
状態を持つには何らかのプログラミング言語で。
HTMLならJavaScriptか。
0515デフォルトの名無しさん
2008/12/09(火) 21:03:490516デフォルトの名無しさん
2008/12/12(金) 02:35:21%name%様への%date%のお知らせです。
が
田中様への2008/12/12のお知らせです。みたいになるようにしたいんじゃないの?
正規表現っていうか普通に置換すればいいだけじゃないの?%name%→%date%とかなると置換順序によってはおかしくなるから、
そこは%name%を%date%で置換したいなら%%date%%と入力しといて後で%%を%に(ryみたいにすればいいと思うけど。
>>514は何が言いたいのか良くわからない。
>>515に同意。Smartyとか使えば全部やってくれるから楽だけど…
0517デフォルトの名無しさん
2008/12/12(金) 09:24:04>%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。
この文章を素直に解釈すると、同じ「%adv%」でも状況に応じて
「こんにちは」にも「さようなら」にもなるって事じゃないのかな。
で、そういう状況依存的な内部状態を持つ操作は、
変数や条件判断文のあるプログラミング言語でないと不可能。
何か変?
0518506
2008/12/13(土) 22:59:58正規表現の(現時点での)限界があることはわかりました。
が、自然言語の「(ある種の)典型的な表現」を滑らかに翻訳するという狭いクラスのタスクに対しては
正規表現がその強力な威力を発揮できると今でも思っています。
0519デフォルトの名無しさん
2008/12/14(日) 00:02:11正規表現なんて正規文法を別の記号で書き直しただけじゃん。
数学的に厳密な定義のあるものなんだから、
明日になって威力が変わったりしないよ。
0520デフォルトの名無しさん
2008/12/14(日) 02:58:280521デフォルトの名無しさん
2008/12/14(日) 08:53:37正規文法 < 文脈自由文法 < 文脈依存文法 < 解析表現文法
0522デフォルトの名無しさん
2008/12/15(月) 00:24:39^(?!.*ABC) ←OK
(?!.*ABC) ←NG
となるのでしょうか?
上記の違いが分かりません
0523デフォルトの名無しさん
2008/12/15(月) 00:38:48.*がABCを食うから。
0524デフォルトの名無しさん
2008/12/15(月) 00:49:370525デフォルトの名無しさん
2008/12/15(月) 01:52:03そこから後ろ(即ち元の文字列全体)が、/^(.*ABC)/にマッチしなければ、全体としてマッチする。
/(?!.*ABC)/の場合は、どんな文字列であっても末尾にマッチする。
なぜなら文字列の末尾から後ろ(即ち空文字列)は/^(.*ABC)/にマッチしないから。
0526デフォルトの名無しさん
2008/12/15(月) 15:17:08あーなるほどね。1回目の%adv%では「こんにちは」、2回目の%adv%では「さようなら」にしたい、とかか。
そりゃ正規表現じゃ無理だわ。いや、限定的な状況ならいけるかもしれないけど。
0527デフォルトの名無しさん
2008/12/16(火) 12:11:49正規表現より上のレイヤでやったほうがよい。
0528デフォルトの名無しさん
2008/12/16(火) 12:32:430529デフォルトの名無しさん
2008/12/16(火) 19:58:47正規表現だけでは何もできないんだから。
perl とか、テキストエディタとか、そのた言語と組み合わせないと。
0530デフォルトの名無しさん
2008/12/16(火) 22:12:400531デフォルトの名無しさん
2008/12/17(水) 01:43:09正規表現で実現可能なことは無理してでも正規表現を使え
なんていう愚かなスレでもないだろうw
0532デフォルトの名無しさん
2008/12/17(水) 09:10:180533デフォルトの名無しさん
2008/12/22(月) 14:32:23ABCの場合
ABC (123)
DEFの場合
DEF (345)
という形に置き換えるのは可能でしょうか?
また、可能ならどのように書いたらいいでしょうか
0534デフォルトの名無しさん
2008/12/22(月) 14:53:58できる。正規表現は
/ABC/
/DEF/
意地悪はさておき、ABCやDEFを検出するのは正規表現だけど
置換をするのはそれぞれの「実装言語や処理系ソフトウェア」だから
>>5のテンプレ埋めてくれないと答えられない。
0535533
2008/12/22(月) 15:54:12訂正します
●正規表現の使用環境
Jane Style Version 3.01
●検索か置換か?
検索後に置換
●説明
文字列にマッチさせた後、マッチした文字列ごとに指定された文字列を後ろに
追加させて置換させたい
●対象データ
�@ ABC
�A DEF
●希望する結果
�@ ABC (123)
�A DEF (345)
0536デフォルトの名無しさん
2008/12/22(月) 16:25:000537デフォルトの名無しさん
2008/12/22(月) 16:51:55この二件だけの場合は二つ表現を書けばいいですが、
後ですぐに置換したい文字列を追加できるよう、(ABC|DEF)のように
orか何かでまとめて作りたいと思っています
それは可能でしょうか
それともやはり一つ一つ書いたほうがいいでしょうか
0538デフォルトの名無しさん
2008/12/22(月) 17:24:29まとめようにも法則性が無いが。
0539デフォルトの名無しさん
2008/12/22(月) 17:27:44どういう機能で何をしようとしてるのかがわからないとどうにもアドバイスのしようが...
(このスレは基本的には、grepやawkやPerlやPythonやJavaの正規表現のスレなので)
0540デフォルトの名無しさん
2008/12/22(月) 17:41:12<rx2>(?<=DEF)[TAB] (345)[TAB]msg
0541デフォルトの名無しさん
2008/12/22(月) 20:35:21http://www.monazilla.org/index.php?e=65
0542デフォルトの名無しさん
2008/12/22(月) 21:36:27あまり正規表現について詳しくないもので
やはりちょっと無理がありましたね・・・
>>539
すみません
少し勘違いをしていました
>>540
有難うございます!
すごくスッキリしていていいですね
参考にさせて頂きます
0543デフォルトの名無しさん
2008/12/27(土) 19:09:30abc-def-1234-ghi-jkl
これから
abc-def
を取りたい
1234は数字が4文字です
1234の前を取るのはどうすればいいですか?
0544デフォルトの名無しさん
2008/12/27(土) 19:14:41「抽出したい」 → 結果として abc-def が欲しい
「削除したい」 → 結果として -1234-ghi-jkl が欲しい
どっち?
できれば >>5 を参考に。
0545デフォルトの名無しさん
2008/12/27(土) 19:31:160546デフォルトの名無しさん
2008/12/27(土) 19:31:35prelで
●検索か置換か?
検索
●説明
12-34は数字が2文字ハイフン2文字です
(\d{2}-\d{2} こうかな?)
12-34の前を抽出するにはどうすればいいですか?
12-34の前の部分に数字が2文字は無いです。
●対象データ
abc3-d5ef-12-34-ghi-jkl
ho-1ge=+-e67-89+fuga++--jkl
●希望する結果
abc3-d5ef-
ho-1ge=+-e
0547デフォルトの名無しさん
2008/12/27(土) 20:59:4212-34でもその一般化したパターンでも使ってマッチングさせてから
特殊変数 $` や@- を参照するなり他の手段で抜き出すなりすればよろしかろ?
0548デフォルトの名無しさん
2008/12/27(土) 23:26:09カッコ ( ) をつかえばいいよ。
0549デフォルトの名無しさん
2008/12/28(日) 11:20:42print /(.*)(?=\d{2}-\d{2})/ ? "match:[$1]\n" : "unmatch.\n" for qw(
abc3-d5ef-12-34-ghi-jkl
ho-1ge=+-e67-89+fuga++--jkl
);
0550デフォルトの名無しさん
2009/01/01(木) 12:55:59正規表現で検索したい場合、Windows環境だとどのツールが便利・一般的なの?
秀丸かな?
Unixだとgrepコマンドがあるけど…
0551デフォルトの名無しさん
2009/01/01(木) 13:29:08一般がどうかはしらないけど自分は秀丸やxyzzyの機能を使ってる
0552デフォルトの名無しさん
2009/01/01(木) 13:32:370553デフォルトの名無しさん
2009/01/01(木) 13:44:45Cygwinを入れるのもいいし、各種テキストエディタに頼るのもいい
でも一番の検索ツールは、
| 何について調べますか?
| ┌────────────┐
| | |
| | |
| └────────────┘
| [ オプション(O) ] [ 検索(S) ]
|
`──────────┐ ┌───
, '´l, ..| ./
, -─-'- 、i_ |/
__, '´ ヽ、
',ー-- ● ヽ、
`"'ゝ、_ ',
〈`'ー;==ヽ、〈ー- 、 !
`ー´ ヽi`ヽ iノ
! /
r'´、ヽ
`´ヽノ
0554デフォルトの名無しさん
2009/01/01(木) 13:51:57| ┌────────────┐
| | おまいの消し方 |
| | |
| └────────────┘
| [ オプション(O) ] [ 検索(S) ]
|
`──────────┐ ┌───
, '´l, ..| ./
, -─-'- 、i_ |/
__, '´ ヽ、
',ー-- ● ヽ、
`"'ゝ、_ ',
〈`'ー;==ヽ、〈ー- 、 !
`ー´ ヽi`ヽ iノ
! /
r'´、ヽ
`´ヽノ
0555550
2009/01/01(木) 14:13:350556551
2009/01/01(木) 14:17:19なんて親切なスレなんだ
0558デフォルトの名無しさん
2009/01/02(金) 11:43:200559デフォルトの名無しさん
2009/01/02(金) 11:46:470560デフォルトの名無しさん
2009/01/02(金) 16:37:56Office のイルカ
大ヒットメーカーが調子に乗りすぎて生み出してしまった
世界の2大うざキャラ。
0561デフォルトの名無しさん
2009/01/02(金) 17:31:360562デフォルトの名無しさん
2009/01/08(木) 11:11:00<[a-z]+ lang="ja">.*?</[a-z]+>
最初の[a-z]+と最後の[a-z]+は同じタグを指定したいのですが、
このままだと、</a>や</b>といった終了タグが先に引っかかってしまい、
いびつな形でマッチしてしまいます。
0563デフォルトの名無しさん
2009/01/08(木) 17:22:05正規表現一発じゃキツい
スキャナを書くか、素直にHTMLパーザ使った方が
0564デフォルトの名無しさん
2009/01/08(木) 17:36:17バックリファレンスかな
<([a-z]+) lang="ja">.*?</\1>
こんな感じで
0565デフォルトの名無しさん
2009/01/08(木) 17:36:39結局パーサ使った方が楽ってことになりそうだけどね。
$s = q{<hoge lang="ja"><a>hogehoge</a><b>hoge</b></hoge>};
print $& if $s =~ m{<([a-z]+) lang="ja">.*?</\1>};
0566デフォルトの名無しさん
2009/01/08(木) 17:54:09> <([a-z]+) lang="ja">.*?</\1>
でうまくいきました。
残念ながら、XMLパーサの使い方がわからない。勉強しないとなぁ…
目的は和英中が混在しているxmlから日本語の部分だけ抽出したかったので、
今回はこれで十分です。
XMLとHTMLタグが混在した形式だったんですが、何故か、HTMLタグにlang設定が
されていて途方にくれていました。
0567デフォルトの名無しさん
2009/01/08(木) 18:39:02本当にちゃんとやろうとしたら正規表現だと無理だな
0568デフォルトの名無しさん
2009/01/10(土) 12:59:560569デフォルトの名無しさん
2009/01/14(水) 15:34:24ちゃんとチェックしとらんが
local our@A;
my$a="jjj<unko>an<unko>hoge</unko>gf</unko>";
local our$b=qr{(.*?(<unko>(??{$b})</unko>)(?{push@A,$2}))*.*?};
$a=~$b;
print join($/,@A),$/;
0570デフォルトの名無しさん
2009/01/20(火) 13:53:47容易な拡張性を確保するためにオブジェクト指向を使って実装してます。
例えば
inputstr[k] == pattern[k] ?
ではなくて
pattern.can_eat(inputstr[k])
のようなpatternをレシーバ(インスタンス)としたかんじです。
現在はグループの中にグループがあるとどうやって解決するか悩んでいます。
(ab(cd|ef)gh)
などで、一応JAVAで実験してます。
0571デフォルトの名無しさん
2009/01/20(火) 13:59:04pattern.contains(inputstr[k]) ?
などでboolean関数です。
性能は速いかどうかではなく、コンパクト・コードサイズ小さいなど目指しています(機能拡張はオブジェクト指向と同じくプラグインしますんで)。
構文木を作るとかではなく容易にスクラッチから書ける程度のコードサイズで、かつ動的に実行時に機能追加できると言うのが条件で作っています。
0572デフォルトの名無しさん
2009/01/20(火) 14:04:39OOならJava, Ruby, Python, .NETとあると思うけど
0573デフォルトの名無しさん
2009/01/21(水) 01:14:50オブジェクト指向を使った実装だと構文木を使ったものよりもだいぶ簡単になる(見通しがよくなる)んですけど・・・
多少コード量(というかクラス・ファイル数)は多くなるんですけど、やっぱりインタプリタは旧来式の構文木を使った実装しかやらないんでしょうか。
0574デフォルトの名無しさん
2009/01/21(水) 01:28:45読んで、正規表現ライブラリを利用者に見せるためのAPIの話ではないの
かも、という印象は持ったが、それ以上は考えるが面倒くさいのでス
ルー。
0575デフォルトの名無しさん
2009/01/21(水) 02:07:17鬼車のポジションを奪える可能性もあるからがんばって!
0576デフォルトの名無しさん
2009/01/21(水) 02:37:563日ぐらい悩んで大体めどがたってきたから別にいいけど。
0577デフォルトの名無しさん
2009/01/21(水) 07:29:45いずれにしても、パターンの構文木()笑を作る必要はあるよ
/(ab(cd|ef)gh)/.match("xabefgh")
/ab(cd|ef)gh/.match("xabefgh")
/ab/.match("xabefgh")
/(cd|ef)gh/.match("efgh")
/(cd|ef)gh/.match("efgh")
/(cd|ef)gh/.match("efgh")
0578デフォルトの名無しさん
2009/01/21(水) 07:29:580579デフォルトの名無しさん
2009/01/22(木) 11:45:20prel
●検索か置換か?
置換
●説明
特定タグ間のHTMLタグを全て削除する
(<body>から</body>までのタグを全て削除)
●対象データ
<html>
<body>
テスト<BR>
<b>です。</b>
</body>
</html>
●希望する結果
<html>
<body>
テスト
です。
</body>
</html>
0580デフォルトの名無しさん
2009/01/22(木) 13:41:18$html =~ s{(?<=<body>).+(?=</body>)} {
(my $body = $&) =~ s/<.+?>//gs;
$body;
}es;
0581デフォルトの名無しさん
2009/01/22(木) 14:08:550582581
2009/01/22(木) 14:11:05prel 正規表現
など prel と何か別のキーワードでぐぐったとき prel は perl とみなされるっぽい
0583デフォルトの名無しさん
2009/01/22(木) 16:40:100584デフォルトの名無しさん
2009/01/24(土) 10:40:12条件判定としての正規表現を使える事は、VBAユーザーにとってこれ以上無いほどのメリットだと思ってる。
俺もそんなに正規表現は詳しくはないけど、エクセルで使う目的を考えると、VBSの正規表現は非常に使い勝手が良い。
良くも悪くもシンプルなんだよね。
仕事で文字列操作やRDBみたいな使い方してる人ならば、絶対に覚えておいて損はないよ。
後方参照が表現できるようになって、世界が開けました。
どうでも良い話かもしれないけど、マジでお勧め。
0585デフォルトの名無しさん
2009/01/24(土) 10:40:370586デフォルトの名無しさん
2009/01/27(火) 23:36:140587デフォルトの名無しさん
2009/01/28(水) 00:08:31環境も。
0588586
2009/01/28(水) 00:46:35環境はVB.NETです。
0589デフォルトの名無しさん
2009/01/28(水) 00:51:340590デフォルトの名無しさん
2009/01/28(水) 00:56:140591479
2009/01/28(水) 03:07:22どこまで固有人名を解析できるかは性能と元の文章次第だけど。
0592デフォルトの名無しさん
2009/01/28(水) 03:07:560593デフォルトの名無しさん
2009/01/28(水) 06:56:440594デフォルトの名無しさん
2009/01/28(水) 10:19:24「苗字+名前」で引っこ抜けばいいと思う
0595デフォルトの名無しさん
2009/01/28(水) 10:37:13扱うかとか考え出すとなにげに難しい
0596デフォルトの名無しさん
2009/01/28(水) 11:34:070597デフォルトの名無しさん
2009/01/28(水) 18:51:360598デフォルトの名無しさん
2009/01/28(水) 19:16:08コンピュータにとって、言うは易いが行うは難しい要求なんだ。
0599586
2009/01/29(木) 01:12:20では郵便番号か都|道|府|県|市|区|町|村のある行から
5行以内にある行で、末尾に。や、のない7文字以内の行で
その行の中には、も。もない文字列
これを抜き取ったら名前の可能性が高そうなのですが
どうやって書けば良いでしょうか
0600デフォルトの名無しさん
2009/01/29(木) 01:52:27それは非常に喜ばしいけれど、名前じゃないものが抽出されたり、名前が抽出されなかった時に
どうするか考えてるの?
そのデータをどうやって作ってるのかよくわからんが、ごちゃごちゃしたテキストしか存在しないの?
0601デフォルトの名無しさん
2009/01/29(木) 01:57:100602デフォルトの名無しさん
2009/01/29(木) 09:57:27正規表現ってのは、
人間が生活しながら身に付ける区別みたいに複雑な物じゃなく、
字面だけで機械的に振り分けする物。
それが可能なデータでないなら、正規表現での抽出は諦めた方がいい。
既存のデータなら仕方ないけど、何等かの方法で生成してる物なら、
その上流で手を打たないと難しい。
0603586
2009/01/29(木) 22:51:11たくさんのデータを一気に処理をするという感じではないので
失敗したら手動で訂正するので大丈夫です。
ちょっと補助的に便利になればという感じで
100件やったら半分でも正常に抽出できればそれでもOKです。
今↓のように書いてみましたがこれだと
123-0001
東京都**区**町10-10
日本太郎
03-0000-0000
東京都**区**町10-10
03-0000-0000
日本太郎
123-0001
上の2つは大丈夫なのですが、
日本太郎
123-0001
東京都**区**町10-10
03-0000-0000
だと抽出できなかったのですが、どこを訂正したらいいでしょうか?
r = New Regex("((\d\d\d\-?\d\d\d\d|都|道|府|県)+?.+\n)*?(.*\n{1,5}?)(?<1>.{4,8})$\n.+?(\d\d\d\-?\d\d\d\d|都|道|府|県)*?\n?", _
RegexOptions.Multiline Or RegexOptions.IgnoreCase)
よろしくお願いします。
0604デフォルトの名無しさん
2009/01/29(木) 23:15:330605デフォルトの名無しさん
2009/01/29(木) 23:33:20パターンが一定ではないので無理。
0606デフォルトの名無しさん
2009/01/29(木) 23:35:34^(\D+)\d
で引っ掛けられそうか。
0607デフォルトの名無しさん
2009/01/29(木) 23:36:39人名なんて住所より短いんだから、行頭から全角6文字以内+行末文字の抽出で十分じゃない。
はい終了。
0608デフォルトの名無しさん
2009/01/29(木) 23:43:230609586
2009/01/30(金) 00:02:42とかが頭にある場合があるので郵便番号と都道府県のチェックは外せないです。
0610デフォルトの名無しさん
2009/01/30(金) 00:07:350611デフォルトの名無しさん
2009/01/30(金) 00:10:28行数が決まってたりすんの?
それだったら名前候補を抽出するプログラムも結構簡単に作れそうだが
全部正規表現でやるのは逆にむずそう
0612デフォルトの名無しさん
2009/01/30(金) 00:13:59そのレベルになってくると、正規表現よりそれを扱うスクリプトの方でどうにかしたほうがいいのでは
そもそもどういう形式のデータかも想像できないし
0613586
2009/01/30(金) 00:16:01データは一つはj一人のデータです。
複数の人の切り分けは考慮する必要なないです。
やっぱ難しいですかね
0614デフォルトの名無しさん
2009/01/30(金) 00:25:56いやもう本気で「日本語でおk」
どんなデータか説明してもらわないと、どうもこうも無いわ。
0615586
2009/01/30(金) 00:44:15自由なフォーマットで送られてくる住所氏名電話番号を
ListViewに登録するということをやっています。
文章は
こんにちは
私の住所は
123-0001
東京都**区**町10-10
日本太郎
03-0000-0000
です
お返事ください。
こんな感じの文章から名前を出来るだけ高確率で取り出したいです。
段階に分けて調べた方がいいですかね
上の例だとまず郵便番号と都道府県と電話番号の位置を正規表現で探して
それらに一番近い7文字の全角句読点なしを取るという感じでどうでしょうか
「です」が怪しいですね「になります」とか書いてあったら間違うし・・・
0616デフォルトの名無しさん
2009/01/30(金) 01:00:30> 自由なフォーマットで
って時点で、正規表現の領域じゃないと思うぞ。
0617デフォルトの名無しさん
2009/01/30(金) 01:01:54とか問題があるな。
ttp://www2s.biglobe.ne.jp/~suzakihp/index40.html
この辺から苗字のリスト拾ってきてそれが含まれてる行を抽出するとかでいんじゃね?
0618デフォルトの名無しさん
2009/01/30(金) 01:08:180619デフォルトの名無しさん
2009/01/30(金) 01:15:22引っかからないのもNGだとすれば、全角と空白を一定以上含む行まで絞ってあとは目視しかない
フリーフォーマットを許さないといけない特段の理由がないのであれば、フォームにするべき
0620デフォルトの名無しさん
2009/01/30(金) 01:30:300621デフォルトの名無しさん
2009/01/30(金) 01:48:200622デフォルトの名無しさん
2009/01/30(金) 03:59:14抜き出すだけでよくね?
0623デフォルトの名無しさん
2009/01/30(金) 04:18:16こんなに引っ張るような事じゃ無いだろ。
0624デフォルトの名無しさん
2009/01/30(金) 05:24:29食いついたもん負け。
0625デフォルトの名無しさん
2009/01/30(金) 07:44:05すると馬鹿は「知らないなら黙っててください」と言い出す
0626デフォルトの名無しさん
2009/01/30(金) 08:16:590627デフォルトの名無しさん
2009/01/30(金) 19:17:21人のことを馬鹿呼ばわりするあなたにはわかるんですか?
わかる方のみ回答お願いします
0628586
2009/01/30(金) 20:15:38漢字の数文字の行から取るというのはいいと思いますが
折角正規表現が使えるのだからそれと郵便番号と住所なんかを手がかりにしたい
(その分確率は上がるでしょうし)と思ったのでお力をお借りできないかと
このスレを訪れてみました。
ご指摘の無理というお話もわかりますがm住所、郵便番号...の条件について、
正規表現で書く書き方を教えて頂けると助かったのですが
範囲の指定とか除外とか色々あって難しくて・・・
ちょっとアプローチを変えて自分なりの方法でやってみました。
住所、郵便番号、電話番号の位置を調べて、それの平均値を出して
それに一番近い7文字の全角でかつ、。や、のない行
から文字を取るようにしたら結構良い確率で抽出するようです。
正規表現とは離れた手法になってきたのでこの件はこれで終わりにしたいと思います。
お騒がせしてすみませんでした。有意義な回答を下さった方ありがとうございました。
0629デフォルトの名無しさん
2009/01/30(金) 20:42:45確実に除外できるものを削除しなよ。
そうすれば全部の名前に少しのゴミを加えたものになるよ。
0630デフォルトの名無しさん
2009/01/30(金) 21:40:390631デフォルトの名無しさん
2009/01/31(土) 11:13:49<a target="_self" class="id a "
href="http://英数字.html">
パターンマッチング1</a>
・
・
$pattern = "/
(
<h1.\s.class=\"title\">
<a.\s.target=\"\_self\".\s.class="id\s.a\s\"
href=\"[0-9|a-zA-Z|\-|\:|\.|\?|\/|\_]+.\">
)
(.*?)(<\/a>)
/";
こんなので全然マッチングできませんでした
どこがまちがっているのか、おしえてください
0632デフォルトの名無しさん
2009/01/31(土) 11:30:33任意の一文字+空白文字一文字+任意の一文字=計三文字
つまり"h1 class"とか"h1! ?class"とかじゃないと引っかからない。
h1とclassの間とかは「空白文字一文字以上」だから\s+でおk
0633デフォルトの名無しさん
2009/01/31(土) 11:31:192chの仕様でスペース一つに見えるけど、半角スペース三つね。
0634デフォルトの名無しさん
2009/01/31(土) 12:21:070635デフォルトの名無しさん
2009/01/31(土) 13:38:00[0-9][0-9][0-9][0-9]をどうやって置換すればいいんですか?
0636デフォルトの名無しさん
2009/01/31(土) 13:53:10echo preg_replace('/[0-9]{4}/','A$0',$str);
-- 出力結果 --
123bA2345
0637デフォルトの名無しさん
2009/01/31(土) 14:04:130638デフォルトの名無しさん
2009/01/31(土) 14:38:44助言ありがとうございます、.を取り除き進歩しました
今度は
$Pattern = "/([^<]h1*>[^a\s]*>)(.*?)(<\/a>)/";
のようにしてみたんですが、全然上手くいきませんでした
0639デフォルトの名無しさん
2009/01/31(土) 14:43:53完全にスレ違いなので、お使いの言語のスレへいってくだしあ
0640635
2009/01/31(土) 15:09:360641デフォルトの名無しさん
2009/01/31(土) 16:37:42>>1
0642デフォルトの名無しさん
2009/01/31(土) 16:42:28おまえ教えろ
0643デフォルトの名無しさん
2009/01/31(土) 16:53:04>>1
>>636
0644デフォルトの名無しさん
2009/01/31(土) 17:31:160645デフォルトの名無しさん
2009/01/31(土) 17:38:440646デフォルトの名無しさん
2009/02/01(日) 00:07:270647デフォルトの名無しさん
2009/02/01(日) 00:42:14つ それ「こざる」
0648デフォルトの名無しさん
2009/02/01(日) 01:09:080649デフォルトの名無しさん
2009/02/01(日) 05:12:340650デフォルトの名無しさん
2009/02/02(月) 04:33:300651デフォルトの名無しさん
2009/02/02(月) 07:54:440652デフォルトの名無しさん
2009/02/03(火) 17:05:09.......<code>.......</code>......
....<code>...........</code>......
こんな感じのドキュメントを、<code>または</code>の前で区切ってsplitで分けようとして
書きましたがうまくいきません。何が悪いのでしょうか。
@content = split( /(?=<(|\/)code>)/, $content);
0653デフォルトの名無しさん
2009/02/03(火) 17:17:00たぶん空文字列や'/'が混じるのが御気に召さないのだろうと
思うがそれは君が (|\/) でキャプチャーしているからだよ。
いらなければ (?:|\/) とか \/? とかにするといい。
0654デフォルトの名無しさん
2009/02/03(火) 17:26:39迅速かつ的確なアドバイス、ありがとうございます。上手くいきました。
意味はこれから勉強していきます。
0655デフォルトの名無しさん
2009/02/04(水) 19:03:45正規表現にて
[ok] 100
[ng] 01 → 1
[ok] 0.001
[ng] 00 → 0
[ok] 0.1000
前ゼロ入力をReplaceで""に置き換えたいのですが、正規表現が上手く書けませぬ
教えてくださいエロい人
0656デフォルトの名無しさん
2009/02/04(水) 19:29:16ベジータ「ふん、ゴミに興味などない」
関口、リーダー『ゴミに興味などない』
ベジータ「な……なんだ貴様ら!?」
リーダー「そんなベジータさんにはこんな問題!」
関口宏「ベジータさんが戦った、ギニュー特選隊のメンバー、五人全員お答え下さいスタート!」
リーダー「走って!まだよまだよまだよどうぞ!」
ベジータ「ギニュー! グルド! えー……バータ! ……待てよ、ギニュー、グルド、バー……くそ、わからん! あっ、ザーボン! なにっ!? ドドリア! くそったれ! ギニュー! グル」
ブッブー!
ベジータ「はぁ……はぁ……」
関口宏「リクーム、ジース」
ベジータ「あーリクーム……」
0657デフォルトの名無しさん
2009/02/04(水) 21:19:39でString.Emptyに置き換えてみたら
でもこれだと000は""になっちゃうけど
0658デフォルトの名無しさん
2009/02/04(水) 21:22:25C#の構文は知らないのですが、
/^0+(\d)/$1/
に相当する正規表現でどうでしょうか
0659デフォルトの名無しさん
2009/02/05(木) 10:33:34>>658
ありがとう(・ω・)
でもダメですた(;´Д`)
^0+(?!\.) 開始0の入力が不可ですた
/^0+(\d)/$1/ $1がサポられてないですた
お騒がせして申し訳ありませんでした。
もう少しイジくり回してみます。
0660デフォルトの名無しさん
2009/02/05(木) 11:13:55abcdefghijxyz
abcdefg
xyzdefabc
から1行の中にabcとxyzの両方を含む行(1と3行目)を検索したいのですがどのように書いたらいいですか?
(.*abc.*xyz.*\n)|(.*xyz.*abc.*\n)
上のように書くとできるのですが含む文字列を増やした場合大変そうです。
本来はどのように書くのでしょうか教えてください。
簡単に&のような文字があるんでしょうか。
0661659
2009/02/05(木) 12:04:30解:System.Text.RegularExpressions.Regex(@"(^|(?=\.))0(?=[0-9])");
ありがとう御座いました。
0662デフォルトの名無しさん
2009/02/05(木) 13:24:20http://www.din.or.jp/~ohzaki/regex.htm#And
0663デフォルトの名無しさん
2009/02/05(木) 14:27:14^(?=.*abc)(?=.*xyz).*$
0664デフォルトの名無しさん
2009/02/05(木) 15:37:08どういった感じにすればいいんでしょうか?
0665デフォルトの名無しさん
2009/02/05(木) 15:46:23ttp://www.pururu.co.jp/goods/item/430-0168/
0666デフォルトの名無しさん
2009/02/06(金) 10:30:49[123(456)]
とした場合1/2/3/456にマッチする。
0667デフォルトの名無しさん
2009/02/06(金) 10:32:36([123]|456)
0668デフォルトの名無しさん
2009/02/06(金) 11:17:300669デフォルトの名無しさん
2009/02/06(金) 13:05:590670659
2009/02/06(金) 18:08:080671デフォルトの名無しさん
2009/02/06(金) 20:46:312000にマッチして、DATE: 2000にはマッチしないようにしたいのですが
どうしたらいいですか?
0672デフォルトの名無しさん
2009/02/06(金) 22:10:55かな。たぶん・・・
>>2 の
http://www.kt.rim.or.jp/~kbk/regex/regex.html#NEGATIVELOOKBEHIND
を読んで。
0673デフォルトの名無しさん
2009/02/06(金) 22:14:47if文で2重チェックすればいいんじゃない?
0674デフォルトの名無しさん
2009/02/06(金) 22:22:42.NET Framework 正規表現言語要素
http://msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp
にちゃんと書いてあった。
.NET なら (?<!・・・・) が使えるみたいだけど、WSH はよくわからん。どこに書いてるんだろう・・・
0675デフォルトの名無しさん
2009/02/06(金) 22:28:02http://msdn.microsoft.com/ja-jp/library/28hw3sce.aspx
0676デフォルトの名無しさん
2009/02/06(金) 22:29:02正規表現による Visual Basic Scripting Edition (VBScript) の機能強化
http://msdn.microsoft.com/ja-jp/library/ms974570.aspx
ここには (?<!・・・) は書いてない。
書いてないから出来ない、と考えるべきか、メンドクサイから書かなかったのか。
出来ることは書くが、出来ないことは書かない。フツウ、そうだよな・・・
ちなみに文書の日付は May 10, 1999 だ。
自分で実験してたしかめろや。
0677デフォルトの名無しさん
2009/02/06(金) 22:32:590678デフォルトの名無しさん
2009/02/06(金) 22:42:200679デフォルトの名無しさん
2009/02/07(土) 03:54:02>>678さん
いつのまにか鬼車ってやつに変わってたんですね
ヘルプの更新してなかったので気が付かなかったです。
鬼車にしたら>>672さんのやり方で出来そうだったんですけど、
なぜか、「正規検索のテスト」のウィンドウ上だとうまく出来てるみたいなんですが、
実際に「ログから検索」にかけるとDATE: 2000が掛かってしまうみたいです。(でもハイライトされない)
結局、検索を本文のみに絞るオプションを発見して一応望む結果は出せたのですが、
何故そうなるのか、どうもしっくり来ないです…
逆に(?<=DATE: )2000でログ検索かけてみると今度は全くマッチしない状態になります。
でもテストウィンドウ上ではちゃんとマッチするんですよね…。
なんかおかしい気がします。Janeのバグなんでしょうかね?
0680デフォルトの名無しさん
2009/02/07(土) 20:12:26最後の「3桁の数字.jpg」を抜き出した意のですが、どのようにやったら綺麗にかけますか?
ヒントをください
0681デフォルトの名無しさん
2009/02/07(土) 20:16:200682デフォルトの名無しさん
2009/02/07(土) 20:41:090683680
2009/02/07(土) 20:52:290684デフォルトの名無しさん
2009/02/07(土) 21:33:570685デフォルトの名無しさん
2009/02/09(月) 19:35:31村にはヒットさせたいが、川村とか大村とか村の前に特定の文字がついた場合にはヒットしたくない場合、正規表現ではどう書けばいいでしょう?
/![川大]村/
とかでいいんでしょうか?
0686デフォルトの名無しさん
2009/02/09(月) 21:35:400687デフォルトの名無しさん
2009/02/09(月) 21:52:070688デフォルトの名無しさん
2009/02/09(月) 22:03:090689デフォルトの名無しさん
2009/02/09(月) 22:11:320690デフォルトの名無しさん
2009/02/09(月) 22:13:290691デフォルトの名無しさん
2009/02/10(火) 01:21:53これはどうかね
0692デフォルトの名無しさん
2009/02/10(火) 08:51:21/(?<![川大])村/
0693デフォルトの名無しさん
2009/02/10(火) 09:55:500694デフォルトの名無しさん
2009/02/10(火) 23:02:24サクラエディタ v1.6.4.0
●検索か置換か?
置換
●説明
「 xml:space=preserve>」を検索のキーとして
キーを含む行末までの文を置換したい
●対象データ
<string1 xml:space=preserve> </string1>
<string2 xml:space=preserve> </string2>
●希望する結果
<string1/>
<string2/>
よろしくお願いします
0695デフォルトの名無しさん
2009/02/10(火) 23:27:100696デフォルトの名無しさん
2009/02/11(水) 01:01:41最初の文字が x だから、
s/<[^x]*xml:space=preserve>//g、でどうだ。
0697デフォルトの名無しさん
2009/02/11(水) 13:40:25s/<([^\s]+)\sxml:space=preserve>[^\n]+<\/\1>/<\1\/>/g
でどうでしょう。
0698デフォルトの名無しさん
2009/02/11(水) 13:44:59改行コードが文字コードによっていろいろなので少し修正
XMLが複雑な入れ子構造だとうまく動作しない場合がありえますが
シンプルな構造で、閉じタグも同じ行にあるのなら大丈夫かも。
サクラエディタは持ってませんが()でのキャプチャは\数字で参照できるようですね。
0699デフォルトの名無しさん
2009/02/11(水) 13:47:57こういう風にも書けるのかな
0700デフォルトの名無しさん
2009/02/11(水) 15:55:48ab
cd
を検索するのに /ab.cd/m と書いたのにヒットしません。
/ab.*cd/m も /ab\ncd/m もダメです。バグでしょうか?
0701デフォルトの名無しさん
2009/02/11(水) 16:42:50そのソフトの名前を出してくれないならどこまで互換性あるのかわからないし
作者かユーザーに聞けとしか。
0702デフォルトの名無しさん
2009/02/11(水) 17:15:32ほんとうにperl互換なら、s オプションをつければいいと思う。
/ab[\r\n]*cd/s
0703デフォルトの名無しさん
2009/02/11(水) 18:09:38このeDocArrangementというソフトです。業務用なので値段がすごいです。試用版で勉強中です。
OCR結果から顧客名を取り出す作業をしたいと思いまして。。。
http://www.technostyle.net/edocarrangement/
>>702
ありがとうございました。出来ました。
\nだけではダメなんですね。詳説正規表現を読み始めたところですが、そんなことは書いてないような気がします。
別の教科書を探すべきでしょうか?
0704デフォルトの名無しさん
2009/02/11(水) 18:12:36\r\nなのはWindows環境だからじゃないの?
それでもオープン時にテキストモード指定してれば\nでいいけど。
0705デフォルトの名無しさん
2009/02/11(水) 18:18:46はい。窓です。正規表現の世界では異端なんですねw
0706デフォルトの名無しさん
2009/02/11(水) 18:28:21もしもデータがファイルにあって、ファイルオープンのコードを自分で書いたのなら
そのパラメタが間違ってるよ。
0707デフォルトの名無しさん
2009/02/11(水) 18:46:37OCRデータから目的のテキストだけを抜き出す作業です。
xdwファイルにOCRデータがありまして
…
氏名
西村ひろゆき
生年月日
…
というデータから名前を抜き出す作業です。
/氏名\n(.*)\n生年月日/m で抜き出せると思って試行錯誤したんですが、うまくいかなくて泣きついた次第です。
ファイルオープンのコードをかくという作業はありません。というか、低レベルなのでそういう高度な作業はよくわからない状態です。。。
0708デフォルトの名無しさん
2009/02/11(水) 18:52:31もし、正規表現を使い始めたばかりなら、詳説正規表現はまだ読むべきじゃない。
読むならまず入門書から入るべきかと。
0709デフォルトの名無しさん
2009/02/11(水) 18:56:53ありがとうございます。たしかに自分には早いのではないかという気がしていました。
はっきりと断言していただきありがとうございます。初心者用の教科書をAmazonで探します。
もしもお勧めがあれば、ご教示いただけましたら幸いです。希望ばかりで大変心苦しいのですが。。。
0710デフォルトの名無しさん
2009/02/11(水) 19:24:02行の末尾がOSによって異なるんだよ。
\n だけのOS(うにくす系)
\r だけのOS(りんご系)
\r\n 両方必要なOS(まど系)
(ここまでは、パソコンの基礎知識)
この3種類に共通に使えるように
[\r\n]*
って書くんだよ。
(これは正規表現の応用問題。よく使う慣用句みたいなもの)
0711デフォルトの名無しさん
2009/02/11(水) 19:24:13Perlの処理部分については必要ないよね、おそらく。
特に正規表現に関して言うなら、試行錯誤して身につけたものの方が多い。
一番参考にしたのは秀丸のヘルプだったりする。
だから本を買う前に、Googleで正規表現を検索して、トップ30ぐらいまでの
ページを順に読むほうがよいかと。
テキストエディタでの正規表現の利用方法を記載しているものもあるけど、
それらも基本は同じだから、まずそこでイメージを掴むべきかと。
本を買うのは、その後。、少しでも自分のイメージができた後で書店で中身を
確認して買うべきだと思う。
最近のテキストエディタは検索結果に一致する箇所にマーカーをするものもあるから、
それで勉強するのもベストかと。
自分が知っている分では秀丸とSakuraエディタ。それ以外にもあるとは思う。
0712デフォルトの名無しさん
2009/02/11(水) 20:34:50正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
だな。
0714デフォルトの名無しさん
2009/02/11(水) 22:57:49サクラエディタを使ったことないので、サクラエディタでの置換方法は分からないのですが
<(\S+)\sxml:space=preserve>[^\r\n]*<\/\1>
で検索にヒットしないでしょうか?
あとは、それを
<$1\/>
に換えるだけですむのですが・・
0715デフォルトの名無しさん
2009/02/11(水) 22:59:51[^\r\n]+
を
[^\r\n]*
にしました
0716デフォルトの名無しさん
2009/02/11(水) 23:28:16個人的には、環境に左右されないからアリだと思うんだけど。
スラッシュで囲むっていう知識は前提にしていいのかな?
0717694
2009/02/12(木) 01:29:13出来ました!ありがとうございます!
しばらく頑張ってたのですが、どうにもうまくいかず参ってたところでした
本当にありがとうございました!
0718デフォルトの名無しさん
2009/02/12(木) 02:18:07まあ正規表現だってのをはっきりさせるのはいいと思うけど、
スラッシュ以外も区切りにできる(できないのもあるけど)というのを
知らない人がさらに増えるようなきがするのはやだなあ。
0719デフォルトの名無しさん
2009/02/12(木) 08:50:34なんか論点が違う気も。
0720デフォルトの名無しさん
2009/02/13(金) 02:32:08<div class="mori">
<h2>てすと</h2>
<img src="./test.gif">
</div>
<div>わわわ</div>
のようなHTMLからclassがmoriの上四行の部分を抜き出したいのですが、正規表現を
<div class="mori">(.|\n)*<\/div>
とすると最後の<div>わわわ</div>まで入ってしまいます。
次に
<div class="mori">[^(</div>)]*<\/div>
を試してみたのですが、これもうまくいきません。
角カッコの中は丸カッコで囲んでも無視されて一文字ずつに分解されてしまうようです。
どうすればいいんでしょうか?
0721デフォルトの名無しさん
2009/02/13(金) 03:26:11*や+は最も長く貪欲にマッチしようとするから、最後の</div>にマッチする。
*や+の直後に?を付ければ最小マッチになってできる限り短くしようとするから
望むような結果になるはず。
0722デフォルトの名無しさん
2009/02/13(金) 10:14:340723デフォルトの名無しさん
2009/02/13(金) 20:04:39おおおおお!まさにこれを求めていました!
いろんな場面で使えそうでとても助かります。どうもありがとうございます。
>>722
それがGM_xmlhttpRequestで得る値なので、全部テキスト形式になってしまうのです。
0724デフォルトの名無しさん
2009/02/14(土) 12:09:33やりたい事は、見出し語:[発音,][定義1][,"例文1","例文2",...][ *注記][; 定義2...]みたいな
テキストを分解して各(配列)変数に設定する、みたいな事なのですがpreg_match_allみたいな関数で
この程度なら実現可能そうでしょうか?
既に結構時間を使ってるので見込みが無さそうならサッサと見切りを付けたいのですが…
0725デフォルトの名無しさん
2009/02/14(土) 12:51:030726デフォルトの名無しさん
2009/02/14(土) 13:28:57もう少し頑張ってみます
0727デフォルトの名無しさん
2009/02/14(土) 20:45:00\[*\]だと無理ですよね
0728デフォルトの名無しさん
2009/02/14(土) 20:49:380729デフォルトの名無しさん
2009/02/14(土) 20:59:08\[*\]だと]しかクォートされないので・・・
0730デフォルトの名無しさん
2009/02/14(土) 21:21:170731デフォルトの名無しさん
2009/02/14(土) 21:40:270732デフォルトの名無しさん
2009/02/14(土) 21:45:240733デフォルトの名無しさん
2009/02/14(土) 21:53:05たとえばファイル名[S][字].avi
s/\[S\]//
してやるとファイル名[字].avi
となりますが
s/\[*\]//
とするとファイル名[S[字].avi
といった感じになります
0734デフォルトの名無しさん
2009/02/14(土) 21:57:33頭悪いのに勝手に自分で問題を切り分けずに、最初からそれをいえよw
*の使い方しらべとけ
0735デフォルトの名無しさん
2009/02/14(土) 22:00:07すいません
0736デフォルトの名無しさん
2009/02/14(土) 22:00:43わからないならわからないと言えばいいじゃないですか
0737デフォルトの名無しさん
2009/02/14(土) 22:17:220738デフォルトの名無しさん
2009/02/14(土) 22:19:090739デフォルトの名無しさん
2009/02/14(土) 22:28:420740デフォルトの名無しさん
2009/02/14(土) 23:26:05横レス失礼します。
s/\[[^\]]*\]//g
これでどうでしょうか?
0741デフォルトの名無しさん
2009/02/14(土) 23:33:42s/\[.*?\]//g
これでも大丈夫でしょう。
最短マッチに対応している正規表現エンジンの場合は。
*や+は条件に合致しつつできるだけ多くの文字を消費するような選択をします。
*?、+?は最短マッチといって、その条件を満たす最短の場合が選ばれます。
想定される用途では否定の文字クラス [^いろいろな文字] を使うか
最短マッチの .*? を使われると良いとおもいます。
別の表現なら否定先読み (?!文字列) をつかっても長くなりそうですが書けます。
ご参考になれば幸いです。
0742デフォルトの名無しさん
2009/02/15(日) 10:10:19最初からそれを書け。
コミュニケーション能力不足。
人間相手にコミュニケーションできないで
コンピュータ相手のコミュニケーションが出来ると思うのか?
s/\[[S字]\]//
0743デフォルトの名無しさん
2009/02/15(日) 15:20:54>>741の正規表現は*の前に見づらいかもしれませんがピリオド.があるのでご注意ください。
>>733の正規表現 /\[*\]/ にヒットする文字列はたとえば
]
[]
[[]
[[[]
[[[[]
[[[[[]
になります。
0744デフォルトの名無しさん
2009/02/15(日) 17:02:57質問に無関係な知識押し付けてる方もひどいが
0745デフォルトの名無しさん
2009/02/16(月) 00:02:060746デフォルトの名無しさん
2009/02/16(月) 00:17:400747デフォルトの名無しさん
2009/02/16(月) 03:22:040748デフォルトの名無しさん
2009/02/18(水) 14:12:37あれば便利そうは気はするし、実際なんかで使った記憶はあるんだけど思い出せない
0749デフォルトの名無しさん
2009/02/18(水) 18:05:150750デフォルトの名無しさん
2009/02/19(木) 20:45:50�@/home/test/hoge/test/test.txt
�A/home/test/hoge/test/document.txt
↑のパスがありまして、そこからtestで検索をすると
�@のtext.txtのみが該当する正規表現ってうまく出来ないものでしょうか?
ファイルまでの途中のパスは含めないで最後のスラッシュ後のファイル名のみ
検索対象としたいのですが悩みまくりです・・・
イメージ的にはエディターでの正規表現で�@のみ該当させる感じです。
どなたかご教授願えないでしょうか?
0751デフォルトの名無しさん
2009/02/19(木) 20:58:11string か strin か stri か str か st か s
にマッチするパターンを今は↓のように書いているんですが
^s(t(r(i(n(g)?)?)?)?)?$
もっと分かりやすい書き方ってありますか?
0752デフォルトの名無しさん
2009/02/19(木) 22:42:23検索キー 「test.txt」
0753デフォルトの名無しさん
2009/02/19(木) 22:44:47/([^\/]+\/)*(.*)/ で、\1がパス、\2がファイル名。
0754デフォルトの名無しさん
2009/02/19(木) 22:54:31秀丸エディタなら↓これでいけた。他は知らん
(?<=.+/)test
0755デフォルトの名無しさん
2009/02/19(木) 22:57:56test\.txt$
でどうでしょう
0756デフォルトの名無しさん
2009/02/19(木) 22:59:13少し修正
test\.txt[\r\n$]
0757デフォルトの名無しさん
2009/02/19(木) 23:00:160758デフォルトの名無しさん
2009/02/20(金) 00:01:430759デフォルトの名無しさん
2009/02/20(金) 02:53:45var[ \r\n\t]+swfArgs[ \r\n\t]*=[ \r\n\t]*\{(.*,|)[ \r\n\t]*(t|'t'|"t")[ \r\n\t]*\:[ \r\n\t]*['"]([a-zA-Z\-_0-9]+=)['"].*\}
の(.*,|)の意味するところがわからない。 ↑
|って○○か××を意味するメタ文字じゃないの?なんで)の直前にあるんだろう?
0760デフォルトの名無しさん
2009/02/20(金) 03:00:420761デフォルトの名無しさん
2009/02/20(金) 03:13:230762デフォルトの名無しさん
2009/02/20(金) 08:04:220763750
2009/02/20(金) 08:57:02例えが悪かったですが実現したいのはデスクトップの検索エンジンでのファイル名検索でファイル名のみで検索したいのです。
みなさんのレスを参考に思考錯誤してみます
0764デフォルトの名無しさん
2009/02/20(金) 20:27:44"t": "([^"]+)"
俺は、これで済ませてるw
0765デフォルトの名無しさん
2009/02/20(金) 21:39:41>>764
それでいけるよねw
0766デフォルトの名無しさん
2009/02/21(土) 21:02:25C#なら
s.Length > 0 && "string".StartsWith(s)
のようにやればいいのに。
0767デフォルトの名無しさん
2009/02/23(月) 19:43:450768デフォルトの名無しさん
2009/02/23(月) 19:56:18『×××』だけでもそれを表すことができる上に、『大事なところ』などボカした表現までスコープを広げると
とても現代の正規表現で賄いきれるものではない。
言語学の分野で議論してくるがいい。
0769デフォルトの名無しさん
2009/02/24(火) 18:45:51if (Regex.Match(line,"(WBC|ワールド・ベースボール・クラシック) && (イチロー|松坂)").Success)
と書いてみたのですが、いまいちうまくヒットしないです。アドバイスお願いします。
0770デフォルトの名無しさん
2009/02/24(火) 20:15:33テンプレの正規表現講座でも見ておいで
0772デフォルトの名無しさん
2009/02/25(水) 10:58:18でいいんじゃね?C#知らないけど。
AND増えるなら条件を配列に入れてループで。
0773デフォルトの名無しさん
2009/02/25(水) 12:46:56Set RegExp1 = new RegExp
Set RegExp2 = new RegExp
RegExp1.Pattern = "WBC|ワールド・ベースボール・クラシック"
RegExp2.Pattern = "イチロー|松坂"
If RegExp1.Test(line) And RegExp2.Test(line) Then
Wscript.Echo "うんこ"
End If
0774デフォルトの名無しさん
2009/02/25(水) 12:49:30Regex.Match の使い方が間違ってる。ちゃんと説明書読んだ?
0775デフォルトの名無しさん
2009/02/25(水) 14:22:030776デフォルトの名無しさん
2009/02/25(水) 15:22:220777デフォルトの名無しさん
2009/02/25(水) 15:42:59if (Regex.Match(line, "WBC|ワールド・ベースボール・クラシック").Success && Regex.Match(line, "イチロー|松坂").Success)
で良いが、IsMatchのほうが良さげ。
if (Regex.IsMatch(line, "WBC|ワールド・ベースボール・クラシック") && Regex.IsMatch(line, "イチロー|松坂"))
0778デフォルトの名無しさん
2009/02/27(金) 19:33:251hage(100禿)
1hage(10毛)
1hage
という文字列があった場合に、1hage(100禿)以外をマッチさせたいのですが、
なかなかうまくいきません。
どのように正規表現を書いたものでしょうか?
0779778
2009/02/27(金) 19:34:25すいません。追記です。
具体的には、"hage"をヒットさせたいのですが、"禿"を含むもののみマッチさせないようにしたいのです。
0780デフォルトの名無しさん
2009/02/27(金) 19:36:03じゃダメなのか? どうしても1個の正規表現でやんないとダメ?
0781デフォルトの名無しさん
2009/02/27(金) 20:30:52うん、やっぱりそれの方がスマートでよいですよね・・・
わかりました。
無理に正規表現だけでやらないとことにします。
ありがとうございました。
0782デフォルトの名無しさん
2009/02/28(土) 14:16:031文字だけの「A」を2文字の「AA」にします。
2文字以上連続していない、1文字だけの「A」は
どうやったら探せますか?
/A{1}/ でも駄目ですし、/A[^A]/ だと
行の中に A しかない物が引っ掛かりません。
0783デフォルトの名無しさん
2009/02/28(土) 16:40:50js> "A AA AAA".replace(/(^|[^A])A([^A]|$)/g, "$1AA$2")
AA AA AAA
js> :q
Leaving "JScript Power Shell"
0784デフォルトの名無しさん
2009/02/28(土) 21:51:490785デフォルトの名無しさん
2009/02/28(土) 23:10:33ありがとう、試してみます。
0786デフォルトの名無しさん
2009/03/02(月) 20:45:200787デフォルトの名無しさん
2009/03/07(土) 00:28:35と
<A href="○○○○○○○"><hogehogetag>●●●●●</hogehogetag></a>
という文字列から●●●●●を取り出したいのですが
どうやって書いたら良いか教えてケロ
決まってるのは<A href="○○○○○○○">の次の<>の外の文字列ということです。
0788デフォルトの名無しさん
2009/03/07(土) 01:14:080789デフォルトの名無しさん
2009/03/12(木) 17:29:290790デフォルトの名無しさん
2009/03/12(木) 17:40:070791デフォルトの名無しさん
2009/03/12(木) 17:53:290792デフォルトの名無しさん
2009/03/13(金) 00:14:55テーブル名をマッチさせる正規表現が解る方、どなたかいらっしゃらないでしょうか?
ひとつの表現で不可能なら、複数でもいいのですが…(´・ω・`)
0793デフォルトの名無しさん
2009/03/13(金) 00:25:510794デフォルトの名無しさん
2009/03/13(金) 01:07:40123,456,789 ←こういうの
0795デフォルトの名無しさん
2009/03/13(金) 01:20:240796デフォルトの名無しさん
2009/03/13(金) 08:53:14自分に都合のいいデータだけ作ってやってるけど。
実際は何が起こっても仕方ない場合が多いのだが。
0797デフォルトの名無しさん
2009/03/13(金) 08:57:590798デフォルトの名無しさん
2009/03/13(金) 12:11:43私も以前、このスレではない所で同様の質問をしたが、真面目な答えは
返ってこなかったよ。正規表現から見るとプログラムテストは鬼門かもね。
0799デフォルトの名無しさん
2009/03/13(金) 12:21:24自分に都合のいいデータだけ作ってやってるけど。
実際は何が起こっても仕方ない場合が多いのだが。
複雑なjavaのテストってどうすればいいんだろうね。
自分に都合のいいデータだけ作ってやってるけど。
実際は何が起こっても仕方ない場合が多いのだが。
複雑なPHPのテストってどうすればいいんだろうね。
自分に都合のいいデータだけ作ってやってるけど。
実際は何が起こっても仕方ない場合が多いのだが。
複雑なバッチファイルのテストってどうすればいいんだろうね。
自分に都合のいいデータだけ作ってやってるけど。
実際は何が起こっても仕方ない場合が多いのだが。
複雑なExcelマクロのテストってどうすればいいんだろうね。
自分に都合のいいデータだけ作ってやってるけど。
実際は何が起こっても仕方ない場合が多いのだが。
・・・正規表現に限った話ではない。
>自分に都合のいいデータだけ作ってやってるけど。
問題の原因がハッキリわかってるじゃないか。それを対処すればいいじゃないか?
自分に都合のいいデータを作ってしまうのが問題なら、他人にデータを作ってもらえばいい。
0800デフォルトの名無しさん
2009/03/13(金) 12:42:08やったことはないが、本気でやるなら、こんな感じになるんだろう。
1.マッチすべきパターンについて構文木を作る
2.構文木を元に直交表を作る
3.実験計画法でテストケースを作る
4.テストケースをテストプログラム化する
0801デフォルトの名無しさん
2009/03/13(金) 14:59:43プログラム言語の場合はステップごととか、プロセジャーや
関数に分割してテストするし、型も助けになる。
正規表現の対象としているのは文字列でここから先は構文解析
しかない。複雑な組み込みシステムの入口、出口でどんな
テストデータを用意すればよいかというのと類似した問題だ。
0802デフォルトの名無しさん
2009/03/17(火) 13:26:09上記のwebページから以下の「マンガホーキング入門」の部分を取り出したいのですがうまくいきません
<tr>
<td bgcolor="#efefef" width="15%" align="center" nowrap><small>
書 名 </small></td>
<td width="85%"><font color="#333399" size="+1"> <strong> マンガホーキング入門 </strong> </font></td>
</tr>
"<strong>(.+?)</strong>"だとここ以外の強調部分もマッチしてしまうので
"書.*?名.+?<strong>(.+?)</strong>"のようにしたのですがこれだとひとつもマッチしてくれません
どのようにするべきなのでしょうか?
0803デフォルトの名無しさん
2009/03/17(火) 13:28:200804デフォルトの名無しさん
2009/03/17(火) 13:36:57「.」は\nを含まないのでだめだったようです
"書.*?名.+?\n.+?<strong>(.+?)</strong>"でいけました
スレ汚しすみませんでした
0805デフォルトの名無しさん
2009/03/20(金) 21:51:43いつも可読性を優先してRegex.Match(data,pattern)みたいに直接使ってるんだけど、
コンパイルが必要になるほど性能が必要な正規表現ってどんなのがあるん?
0806デフォルトの名無しさん
2009/03/20(金) 22:00:44一般論的に正規表現のコンパイルというと、何度も同じ正規表現を
使うときに差が出る。
それが有意な差になるかはプロファイル取ってみないとわからないけど。
ところで可読性なら生の正規表現よりも定数とかに入れて
名付けた方がいいんじゃない?めんどくさいけど。
0807デフォルトの名無しさん
2009/03/20(金) 22:06:30perlでo使ったらうれしいときと同じだよ。
0808デフォルトの名無しさん
2009/03/20(金) 22:09:58>ところで可読性なら生の正規表現よりも定数とかに入れて
>名付けた方がいいんじゃない?めんどくさいけど。
コード体系とかのパースの場合は定数化してるよ。
"Key: Value"なデータのパースとかはハードコードかな。
わざわざファイル移動で確認させる価値もないし。
0809デフォルトの名無しさん
2009/03/21(土) 02:47:410810デフォルトの名無しさん
2009/03/26(木) 17:50:58を引っ掛けるにはどう書いたらいいんでしょうか?
.*\.csvを引っ掛けたいのですが、.outが含んでいるときはだめ、という形です。
/[\w\0-9]+(?!\.out)\.csv/
みたいに書いてみたのですが、.out.csvも.csvもともに引っかかってしまいます。
0811デフォルトの名無しさん
2009/03/26(木) 18:01:21/(?<!\.out)\.csv/
0813デフォルトの名無しさん
2009/03/26(木) 22:41:48それ単に.csv以前に「.」を含まないものにマッチだから、
hoge.hoge.csv
はマッチしないけどそれでいいの? .outは含んでないよ。
0814デフォルトの名無しさん
2009/03/27(金) 00:05:41否定先読みはきちんと理解出来てる?
もう一度パターン眺めてみると良いかも。
0815デフォルトの名無しさん
2009/03/29(日) 11:05:44ファイル名が1行の中に列挙されていて
たとえば、hoge1.zip hoge3.zip hoge5.exe のような場合に
行中に .zipでない拡張子が含まれるという条件にマッチする正規表現は可能でしょうか。
ファイル名の区切りは、スペースを仮定します。
0816デフォルトの名無しさん
2009/03/29(日) 11:58:50こんな感じ?拡張子は3文字として決め打ちしてるけど。
ファイルとファイルの間にスペースがあるなら、スペースまでのマッチに工夫すれば良いと思うよ。
0817デフォルトの名無しさん
2009/03/30(月) 23:57:551.txtを\dでマッチさせようとしているのですが、
01がマッチしてしまいます。
a.txtを\Dで待ちさせようとすると
0aがマッチしてしまいます。
どうして2バイトになるのでしょうか?
0818デフォルトの名無しさん
2009/03/31(火) 00:30:470819デフォルトの名無しさん
2009/03/31(火) 01:18:23そうでした。すみません。
0820デフォルトの名無しさん
2009/04/05(日) 23:29:32.NET 1.1 (C#)
●説明
テキストボックスに入力された文字の最後が
大文字小文字関係なく .csv と入力されているか
判断したいです。
if (textBox1.Text.EndsWith(".csv"))
とすると、小文字のcsvでないとTRUEを返してくれません。
.NET2.0以上なら、EndsWith(".csv", 大文字小文字無視)
のように書けるのですが、1.1だとそのメソッドがありません。
恐れ入りますが、ご教授おねがいします。
0821デフォルトの名無しさん
2009/04/06(月) 00:04:39うしろから4文字を取ってきて、小文字化してから".csv"と比べるとか。
0822デフォルトの名無しさん
2009/04/06(月) 00:30:59あっ、その方法がありましたね。
自分の頭が固かったです。
文字列を一旦小文字にしてから
比較することで無事解決できました。
どうもありがとうございました。
0823デフォルトの名無しさん
2009/04/06(月) 20:31:31どのように記述したものでしょうか?
0824デフォルトの名無しさん
2009/04/06(月) 20:34:26http://www.din.or.jp/~ohzaki/regex.htm#Nothing
ここにありました。
(?!)
こんな簡単なのでいいんですね
0825デフォルトの名無しさん
2009/04/06(月) 20:52:58良いんでない?
0826デフォルトの名無しさん
2009/04/07(火) 14:27:36と言う感じで任意の回数スラッシュが出てくるんですが、一番最後のスラッシュ
だけをsedで "/"→"/tmp/"に置き換えたいんです。
正規表現を使って置換可能でしょうか?記述が全く思いつきません、、、
0827デフォルトの名無しさん
2009/04/07(火) 14:53:02s/(\/[^/]+)$/\/tmp\1/g
0828デフォルトの名無しさん
2009/04/07(火) 14:53:15s:/[^/]*$:/tmp&:
0829デフォルトの名無しさん
2009/04/07(火) 21:32:380830デフォルトの名無しさん
2009/04/07(火) 22:56:23全く思いつかないってのは単に勉強不足じゃない?
0831826
2009/04/08(水) 00:19:51色々アドバイスありがとうございます。
828氏の記述で期待通りの処理が出来ました。
>>830
すみません、仰るとおりで。
書いた後色々グググって、IBMのページ
http://www.ibm.com/developerworks/jp/linux/library/l-sed2/index.html
の"円記号付き括弧"を参考にした漏れなりの解↓
's/\(.*\)\/\(.*\)/\1\/tmp\/\2/g'
自分で書いておきながら、何でこれが一番最後のスラッシュにマッチするのか
よく分かってない('A`
0832デフォルトの名無しさん
2009/04/08(水) 01:04:48で、最初の括弧が\1、次の括弧が\2としてマッチ。
というか\2の辺り削ってもいいんじゃないかと。
s/(.*)\//\1\/tmp\//g
0833826
2009/04/08(水) 01:26:34いや、分からないのは、's/\(.*\)\/\(.*\)/\1\/tmp\/\2/g' この表現で何故
aaa/tmp/bbb/ccc/ddd/eee/fff.txt
とならずに
aaa/bbb/ccc/ddd/eee/tmp/fff.txt
と、一番最後のスラッシュが対象になるのかなぁ、と。
0834デフォルトの名無しさん
2009/04/08(水) 01:44:41#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
typedef struct bregexp { const char *outp; const char *outendp; int splitctr; const char **splitp; int rsv1; char *parap; char *paraendp; char *transtblp; char **startp; char **endp; int nparens; } BREGEXP;
typedef int (WINAPI *fa)(char * , char * , char * , BREGEXP ** , char *);
typedef void (WINAPI *fb)(BREGEXP *);
main(){
char bunsyo[26]="abcdefghijklmnopqrstuvwxyz";
char findstr[]={0xA5, 0xEA}, *p, msg[80];
HINSTANCE hd = LoadLibrary("bregonig.dll");
fa BMatch = (fa)GetProcAddress(hd,"BMatch");
fb BRegfree = (fb)GetProcAddress(hd,"BRegfree");
string str = "m/" + (string)findstr + "/i";
char c=47; str[1]=str[28]=c;
{ BREGEXP *rxp = NULL;
if( BMatch( &str[0], bunsyo, bunsyo+26, &rxp, msg) )
{ cout<<"Hit "; p=(rxp->startp[0]); } else cout<<"NoHit ";
BRegfree(rxp); }
cout<<"デミリタ "<< c <<" は通る\n";
c=1; str[1]=str[28]=c;
{ BREGEXP *rxp = NULL;
if( BMatch( &str[0], bunsyo, bunsyo+26, &rxp, msg) )
{ cout<<"Hit "; p=(rxp->startp[0]); } else cout<<"NoHit ";
BRegfree(rxp); }
cout<<"デミリタ "<< c <<" は通る\n";
}
0835834の修正。 これが動作しません
2009/04/08(水) 02:11:11#include <iostream>
#include <string>
using namespace std;
typedef struct bregexp { const char *outp; const char *outendp; int splitctr; const char **splitp; int rsv1; char *parap; char *paraendp; char *transtblp; char **startp; char **endp; int nparens; } BREGEXP;
typedef int (WINAPI *fa)(char * , char * , char * , BREGEXP ** , char *);
typedef void (WINAPI *fb)(BREGEXP *);
main(){
char bunsyo[7]="abcdef/";
char findstr[4]={0x2F, 0xA5, 0xEA, 0}, *p, msg[80];
HINSTANCE hd = LoadLibrary("bregonig.dll");
fa BMatch = (fa)GetProcAddress(hd,"BMatch");
fb BRegfree = (fb)GetProcAddress(hd,"BRegfree");
string str=(string)"m/" + (string)findstr + (string)"/i";
char c='/'; str[1]=str[9]=c;
{ BREGEXP *rxp = NULL;
if( BMatch( &str[0], bunsyo, bunsyo+7, &rxp, msg) ) { cout<<"Hit "; p=(rxp->startp[0]); } else cout<<"NoHit ";
BRegfree(rxp); }
cout<<"デミリタ "<< c <<" は通る\n";
c='*'; str[1]=str[9]=c;
{ BREGEXP *rxp = NULL;
if( BMatch( &str[0], bunsyo, bunsyo+7, &rxp, msg) ) { cout<<"Hit "; p=(rxp->startp[0]); } else cout<<"NoHit ";
BRegfree(rxp); }
cout<<"デミリタ "<< c <<" は通る\n"; }
0836デフォルトの名無しさん
2009/04/08(水) 02:14:16デミリタを「/」以外にするとバグるようなんです。
しかし、検索しようとする文字に「/」が含まれている場合は別のデミリタを使うしか無く困ります。
0837デフォルトの名無しさん
2009/04/08(水) 02:40:050838デフォルトの名無しさん
2009/04/08(水) 04:20:23最大マッチと最小マッチの差じゃない?
sedは知らんけど
0839836
2009/04/08(水) 04:27:1240 41 42 43 63 91 92 129
EUC全角カタカナ「リ」
0840デフォルトの名無しさん
2009/04/08(水) 04:39:050841836
2009/04/08(水) 05:14:28検索対象には含まれていないのに、含まれているとなるんです。
0842デフォルトの名無しさん
2009/04/08(水) 06:55:230843836
2009/04/08(水) 08:09:39Bは馬場さんのBでバイナリではなかったのか。
0844836
2009/04/08(水) 08:16:095.制限事項・注意事項
Oniguruma 自体は各種文字エンコーディングに対応していますが、
bregonig.dll は Bregexp.dll との互換性のため、ASCII と Shift_JIS 以
外の文字エンコーディングは使用できません。
0845鬼車を弄くった。これで任意の文字でいけるだろうか
2009/04/08(水) 10:14:16#include <iostream>
#include <string>
using namespace std;
#include "oniguruma.h"
#pragma comment(lib, "onig.lib")
char *Bfind(char *start,char *end, string ptn, int *size){
int r; regex_t* reg; OnigErrorInfo einfo; char *p=NULL; *size=0;
r = onig_new(®, (UChar*)&ptn[0], (UChar*)&ptn[ptn.size()] ,ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_DEFAULT, &einfo);
if (r != ONIG_NORMAL) return NULL;
OnigRegion *region = onig_region_new();
r = onig_search(reg, (UChar*)start, (UChar*)end, (UChar*)start, (UChar*)end, region, ONIG_OPTION_NONE);
if (r >= 0) { *size=region->end[0]-region->beg[0]; p= start+r; }
onig_region_free(region, 1 ); onig_free(reg); onig_end(); return p; }
char *Bpick(char *start, char *end, string ptn, string &str){
int r; regex_t* reg; OnigErrorInfo einfo; char *p=NULL; str=""; int size;
r = onig_new(®, (UChar*)&ptn[0], (UChar*)&ptn[ptn.size()] ,ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_DEFAULT, &einfo);
if (r != ONIG_NORMAL) return NULL;
OnigRegion *region = onig_region_new();
r = onig_search(reg, (UChar*)start, (UChar*)end, (UChar*)start, (UChar*)end, region, ONIG_OPTION_NONE);
if (r >= 0) {
if(region->num_regs==1){p=start + region->beg[0]; size=(region->end[0]-region->beg[0]); }
else { p=start + region->beg[1]; size=(region->end[1]-region->beg[1]); }
str.resize(size); memcpy(&str[0],p,size) ;}
onig_region_free(region, 1 ); onig_free(reg); onig_end(); return p; }
main(){
char x[]="zzzzaffffffffb"; string s,ptn;
ptn="a.*b"; Bpick(x, x+strlen(x), ptn, s); cout<<s<<endl;
ptn="a(.*)b"; Bpick(x, x+strlen(x), ptn, s); cout<<s<<endl; }
0846デフォルトの名無しさん
2009/04/08(水) 10:37:09うちの環境ではEUCの文字でバグっていたところも問題でなくなりました。
Bfindは、ptnを検索して、見つかった先頭アドレスを返します。
Bpickは、正規表現にマッチした文字列をstrにセットします。
0847デフォルトの名無しさん
2009/04/08(水) 23:31:24>EUC全角カタカナ「リ」
2バイト目は0xEAだから、Shift_JISの1バイト目として解釈されてその次の1バイトが
デリミタとして扱われていない。
そういう変なバイト列を検索したいのなら、\xHH形式を使えば?
findstr="\\x2F\\xA5\\xEA";
0848デフォルトの名無しさん
2009/04/09(木) 02:09:320849デフォルトの名無しさん
2009/04/09(木) 08:10:26http://goo.ne.jp
ttp://news.google.com/
↓↓↓↓↓↓↓↓↓↓
goo.ne.jp
google.com
としたいです。
0850デフォルトの名無しさん
2009/04/09(木) 08:26:400851デフォルトの名無しさん
2009/04/09(木) 09:33:07URLだかURIのRFCに正規表現がそのまま載ってた覚えがあるぞ。
0852デフォルトの名無しさん
2009/04/09(木) 10:00:37\1
でいいだろ
0853デフォルトの名無しさん
2009/04/11(土) 13:51:180854デフォルトの名無しさん
2009/04/11(土) 14:28:59↓
$1 \r
0855デフォルトの名無しさん
2009/04/11(土) 14:31:31“ホスト名”の定義があいまい
トップページへのアクセス先を取りたいということの場合に
sub.example.jpに対してトップはexample.jpではなくmain.example.jpだったら?
FQDNを抜き出すということなら自分はこうする
([^:/]+)(?=\/)
0856855
2009/04/11(土) 14:33:510857デフォルトの名無しさん
2009/04/11(土) 23:42:470858デフォルトの名無しさん
2009/04/12(日) 05:52:12たとえば、
第一条 → 第1条
第十一条 → 第11条
第三十四条 → 第34条
第百条 → 第100条
第百二十三条 → 第123条
第三百二条 → 第302条
第千三条 → 第1003条
第千二十三条 → 第1023条
等です。ついでに、
第二百五十六条の二 → 第256条の2
第二百五十六条の二の一 → 第256条の2の1
なんかも置換できれば大変うれしいです
よろしくお願いします。
0859デフォルトの名無しさん
2009/04/12(日) 07:57:41なんらかの言語の支援がないと。
0860デフォルトの名無しさん
2009/04/12(日) 09:33:590861デフォルトの名無しさん
2009/04/12(日) 12:40:410862デフォルトの名無しさん
2009/04/13(月) 00:18:11正規表現
0863デフォルトの名無しさん
2009/04/13(月) 02:00:53たとえば、テキスト・ファイル中に
「まったく正規表現とは関係ないが、民事訴訟法第123条第2項は美しい!」
とかあった場合に、その行にカーソルをおいて特定のキーを押せば、
民事訴訟法第123条第2項の条文がポップ・アップで表示できるEmEditorの(Javascriptもどきの)
マクロを作って使用しているのですが、模範六法のCD等から落としたファイルの条文は
算用数字なのに、Webページで公開されている条文のなかには漢数字のものが多いので、
それを利用したいな、なんて思ったたわけです。
貴兄たちの異常な才能を信じてお願いしてみました。
0864デフォルトの名無しさん
2009/04/13(月) 02:06:180865デフォルトの名無しさん
2009/04/13(月) 02:07:07それは貴方の求める機能の目的であって、
そこに正規表現を使う理由にはならないでしょう?
およそ正規表現が引き合いに出されるような要求では無いように思いますが。
0866デフォルトの名無しさん
2009/04/13(月) 02:27:08私が作ったマクロが正規表現で条項の検索をしているので、
そこのところを置き換えるだけですめばわたしにとって便利だ
という、たんなる自己中理由でした。
みなさんに不愉快な思いをさせたみたいですみません。
0867デフォルトの名無しさん
2009/04/13(月) 04:36:090868デフォルトの名無しさん
2009/04/13(月) 06:03:19>>863にEmEditorのマクロでと記載してあるが。
0869デフォルトの名無しさん
2009/04/13(月) 09:09:22その Javascriptもどき ってヤツでプログラミングすればいいんじゃないの?
こんなのがあるけど参考になるかな・・・
http://d.hatena.ne.jp/rubikitch/20081201/1228142072
0870デフォルトの名無しさん
2009/04/13(月) 09:11:53http://blog.livedoor.jp/simizu001/archives/51011476.html
0871デフォルトの名無しさん
2009/04/13(月) 09:14:41http://www.windows-world.jp/ganko/-/53252.html
0872デフォルトの名無しさん
2009/04/13(月) 22:44:12Flexible Renamer(Perl5互換)
●検索か置換か?
置換
●説明
サクラエディタでNCプログラムの編集をしています
可能かどうかわかりませんが以下のような形式で
Nの後の番号を振り直すというのはできるでしょうか?
●対象データ
N10 ABC
N10 DEF
N30 GHI
N100 JKL
N50 MNO
●希望する結果
N10 ABC
N20 DEF
N30 GHI
N40 JKL
N50 MNO
0873デフォルトの名無しさん
2009/04/13(月) 23:08:530875デフォルトの名無しさん
2009/04/14(火) 01:36:46....replace(/^N\d+/, "N" + n); n += 10;
のようにやるよりは
{ $1 = "N" (10 * NR); print }
の感じのほうがいいな。
0876taguti
2009/04/14(火) 14:41:40(x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。
・公式:底辺x高さ÷2を使って計算してください。
お願いします!!
0877デフォルトの名無しさん
2009/04/14(火) 14:47:380878デフォルトの名無しさん
2009/04/14(火) 16:15:56先っぽの皮が余ってしょうがないんです。
お願いします!!
0879デフォルトの名無しさん
2009/04/14(火) 22:41:17これはひどいwww
ここまで来ると逆に尊敬するマルチ野郎だな。
http://pc12.2ch.net/test/read.cgi/tech/1237091698/493
http://pc12.2ch.net/test/read.cgi/tech/1232055225/770
http://pc12.2ch.net/test/read.cgi/tech/1217575832/499
http://pc12.2ch.net/test/read.cgi/tech/1235927586/774
http://pc12.2ch.net/test/read.cgi/tech/1212498448/876
http://pc12.2ch.net/test/read.cgi/tech/1212409946/66
http://pc12.2ch.net/test/read.cgi/tech/1217575832/499
http://pc12.2ch.net/test/read.cgi/tech/1192201659/808
http://pc12.2ch.net/test/read.cgi/tech/1205156417/821
http://pc12.2ch.net/test/read.cgi/tech/1238032584/16
http://pc12.2ch.net/test/read.cgi/tech/1224719784/934
良識を疑うよ。
0880デフォルトの名無しさん
2009/04/14(火) 22:54:02すれ違いだけど
俺もそれ学校の問題で出されたことある。
定番かな。構造体使うC言語の問題で。
はっきりいって、三角形の公式使わないほうが楽だよね。
一点を原点移動して例の公式を適用するのが一番シンプルだと思う。
0881デフォルトの名無しさん
2009/04/15(水) 18:25:02ヘロンの定理でググれカス。
0882デフォルトの名無しさん
2009/04/15(水) 20:12:01不覚にも
0883デフォルトの名無しさん
2009/04/16(木) 00:50:480884デフォルトの名無しさん
2009/04/16(木) 12:31:02そんな事より
答え書けよ!
0885デフォルトの名無しさん
2009/04/16(木) 13:25:44ヘロンの定理
イラナイだろ
とんち問題だよ
0887デフォルトの名無しさん
2009/04/16(木) 13:58:24正規表現のスレで出る話題じゃない。
0888デフォルトの名無しさん
2009/04/16(木) 14:04:39#include <math.h>
int main(void)
{
double x1, y1, x2, y2, x3, y3;
double a, b, c, s, S;
#define INPUT(x) printf(#x ": "); scanf("%lf", &x)
INPUT(x1); INPUT(y1);
INPUT(x2); INPUT(y2);
INPUT(x3); INPUT(y3);
a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0;
S = sqrt(s * (s - a) * (s - b) * (s - c));
printf("三角形の面積は %lg\n", S);
return 0;
}
0889デフォルトの名無しさん
2009/04/16(木) 19:48:180890デフォルトの名無しさん
2009/04/16(木) 20:06:18こういう一見親切そうな行動をする人間が、世の中のすべてを駄目にする。
0891デフォルトの名無しさん
2009/04/16(木) 20:26:150892デフォルトの名無しさん
2009/04/16(木) 20:36:33照合するのに使う
0893デフォルトの名無しさん
2009/04/16(木) 20:38:14お舞いも
書いてみたら
0894デフォルトの名無しさん
2009/04/16(木) 20:56:340895デフォルトの名無しさん
2009/04/16(木) 21:54:39さあ誰か書け
0896デフォルトの名無しさん
2009/04/16(木) 22:04:040897デフォルトの名無しさん
2009/04/16(木) 22:17:53>それぞれに実数つを読み込んで
ココ
とても難しい
どこから?
どうやって?
それで
乱数で与えてみる
0898デフォルトの名無しさん
2009/04/16(木) 22:44:34√を使うから
誤差はどう?
0899デフォルトの名無しさん
2009/04/16(木) 22:49:03ttp://homepage2.nifty.com/tomoarai/java/exper.html
0900デフォルトの名無しさん
2009/04/16(木) 23:01:38/*倍率*/ M=100000000;
/*回数*/ N=1000;
document.write('<style>td,th{font-size:10;}</style><table border=1><tr>');
document.write('<th>x1</th><th>y1</th><th>x2</th><th>y2</th><th>x3</th><th>y3</th>');
document.write('<th>底辺x高さ÷2公式<br>による面積計算結果</th>');
document.write('<th>ヘロン公式による<br>√を使った面積計算結果</th>');
document.write('<th>問題となる誤差<br>倍率'+M+'倍</th></tr>');
for(i=0;N>i;i++){ // 数値を自動代入
x1=(Math.random()*2-1)*M; y1=(Math.random()*2-1)*M;
x2=(Math.random()*2-1)*M; y2=(Math.random()*2-1)*M;
x3=(Math.random()*2-1)*M; y3=(Math.random()*2-1)*M;
a=Math.abs(x1-x2)*Math.abs(y1-y2)/2; // 底辺x高さ÷2公式による面積の計算
b=Math.abs(x2-x3)*Math.abs(y2-y3)/2;
c=Math.abs(x3-x1)*Math.abs(y3-y1)/2;
s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3))
s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3)); S=s-a-b-c; S1=S;
a = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // ヘロン公式による√を使った面積の計算
b = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0; S = Math.sqrt(s * (s - a) * (s - b) * (s - c)); S2=S;
document.write('<tr><td> '+x1+'</td><td> '+y1+'</td>'); // 計算結果と誤差を表示
document.write('<td> '+x2+'</td><td> '+y2+'</td><td> '+x3+'</td><td> '+y3+'</td>');
document.write('<td> '+S1+'</td><td> '+S2+'</td><td> '+(S1-S2)+'</td></tr>');
}document.write('</table>');
</script>
0902デフォルトの名無しさん
2009/04/16(木) 23:13:330903デフォルトの名無しさん
2009/04/16(木) 23:20:59あるCのソースから構造体(typedefも)を抽出したいのですが、
この例のようなstructやunionを含んでるstructを
マッチさせるにはどう書けばいいんですか?
struct A{
unsigned short a;
unsigned long b
char* c;
struct{
long e[8];
long f;
}d;
};
0904デフォルトの名無しさん
2009/04/16(木) 23:24:21matchさせると良い
0905デフォルトの名無しさん
2009/04/16(木) 23:29:330906デフォルトの名無しさん
2009/04/16(木) 23:47:31data=list*->A.c;
if(data.match(/.*/)){
}
0907デフォルトの名無しさん
2009/04/16(木) 23:48:55y=(66218011.1129441)-(8544355.772346469);
0908デフォルトの名無しさん
2009/04/17(金) 00:15:56>この例のようなstructやunionを含んでるstructを
一般に、任意にネストできる構造は正規表現で照合できない
(実は、「Perlの」正規表現ではできてしまうけど、ごちゃごちゃしたものになるので
オススメしない)。正確に抽出したいならCのパーザを自前で書くか、どっかからCのパーザ
拾ってくるのが良い
0909デフォルトの名無しさん
2009/04/17(金) 00:22:26<center><script> var x1, y1, x2, y2, x3, y3; var a, b, c, s, S; var S1,S2,M,N;
/*可変*/ N=1000;
document.write('<style>td,th{font-size:10;} </style><table border=1><tr>');
document.write('<th>x1 </th><th>y1 </th><th>x2 </th><th>y2 </th><th>x3 </th><th>y3 </th>');
document.write('<th>底辺x高さ÷2公式<br>による面積計算結果 </th>');
document.write('<th>ヘロン公式による<br>√を使った面積計算結果 </th>');
document.write('<th>問題となる誤差<br>倍率'+M+'倍 </th> </tr>');
for(i=-N;N>=i;i++){ // 数値を自動代入
x1=0; y1=i;
x2=-1; y2=0;
x3=1; y3=0;
a=Math.abs(x1-x2)*Math.abs(y1-y2); // 底辺x高さ÷2公式による面積の計算
b=Math.abs(x2-x3)*Math.abs(y2-y3);
c=Math.abs(x3-x1)*Math.abs(y3-y1);
s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3))
s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3)); S=s-(a+b+c)/2; S1=S;
a = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // ヘロン公式による√を使った面積の計算
b = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0; S = Math.sqrt(s * (s - a) * (s - b) * (s - c)); S2=S;
document.write('<tr><td> '+x1+' </td><td> '+y1+' </td>'); // 計算結果と誤差を表示
document.write('<td> '+x2+' </td><td> '+y2+' </td><td> '+x3+' </td><td> '+y3+' </td>');
document.write('<td> '+S1+' </td><td> '+S2+' </td><td> '+(S1-S2)+' </td> </tr>');
}document.write(' </table>');
</script>
0910デフォルトの名無しさん
2009/04/17(金) 00:28:10その結果√を使用すると
誤差が大きいと判断される
>>909 ⇒ >>900 ⇒ >>888
JavaScriptが動く HTML実験部屋
ttp://homepage2.nifty.com/tomoarai/java/exper.html
0911デフォルトの名無しさん
2009/04/17(金) 00:44:36<td>タグの中身を取得したいのですが、ネストしている場合は、
内側のタグのみを対象としたいです。
そこで否定先読みで<td>と</td>の間の文字列でかつ、"<td>"に続かない
ものにマッチするという正規表現を書こうとしています。
現状では以下のような感じです。
$_ =<<DATA;
<td>データ1</td>
<td>
<tr>
<td>データ2</td>
</tr>
</td>
DATA
# 内側のテーブルタグのみにマッチさせたい
@res = /<td>(?![\s\w<>]+?<td>)[\s\S]+?<\/td>/gm; # こっちはOK
#@res = /<td>(?![\s\S]+?<td>)[\s\S]+?<\/td>/gm; # NG
分からないのはNGと書いた方が上手く動かない理由です。
現象としては、否定先読み条件の中の最短マッチが適用されていないように思います。
上の例ですと、データ2のみが取得されてしまいます。
修正方法を教えていただけないでしょうか。
0912デフォルトの名無しさん
2009/04/17(金) 02:14:58[\s\S]って
.
と同じ?
0913デフォルトの名無しさん
2009/04/17(金) 02:36:13<center><script> var x1, y1, x2, y2, x3, y3; var a, b, c, s, S; var S1,S2,M,N;
/*可変*/ N=1000; P='';
P+=('<style>td,th{font-size:10;} </style><table border=1><tr>');
P+=('<th>x1 </th><th>y1 </th><th>x2 </th><th>y2 </th><th>x3 </th><th>y3 </th>');
P+=('<th>底辺x高さ÷2公式<br>による面積計算結果 </th>');
P+=('<th>ヘロン公式による<br>√を使った面積計算結果 </th>');
P+=('<th>問題となる誤差<br>倍率'+M+'倍 </th> </tr>');
for(i=-N;N>=i;i++){ // 数値を自動代入
x1=0; y1=i;
x2=-1; y2=0;
x3=1; y3=0;
a=Math.abs(x1-x2)*Math.abs(y1-y2); // 底辺x高さ÷2公式による面積の計算
b=Math.abs(x2-x3)*Math.abs(y2-y3);
c=Math.abs(x3-x1)*Math.abs(y3-y1);
s=(Math.max(Math.max(x1,x2),x3)-Math.min(Math.min(x1,x2),x3))
s*=(Math.max(Math.max(y1,y2),y3)-Math.min(Math.min(y1,y2),y3)); S=s-(a+b+c)/2; S1=S;
a = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // ヘロン公式による√を使った面積の計算
b = Math.sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
c = Math.sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
s = (a + b + c) / 2.0; S = Math.sqrt(s * (s - a) * (s - b) * (s - c)); S2=S;
P+=('<tr><td> '+x1+' </td><td> '+y1+' </td>'); // 計算結果と誤差を表示
P+=('<td> '+x2+' </td><td> '+y2+' </td><td> '+x3+' </td><td> '+y3+' </td>');
P+=('<td> '+S1+' </td><td> '+S2+' </td><td> '+(S1-S2)+' </td></tr>');}P+=('</table>');
data=P; data=data.replace(/(<td>)([^<>]*)(<\/td>)/g,'$1 消去$3'); document.write(data);
</script>
0914デフォルトの名無しさん
2009/04/17(金) 02:37:52これを参考に・・・
data=data.replace(/(<td>)([^<>]*)(<\/td>)/g,'$1消去$3');
0915デフォルトの名無しさん
2009/04/17(金) 02:51:50せっかく>>876を行列式で書くなら
3D空間で同様に書いてみたら?
つまり宇宙的規模と言う事です。
(x1,y1,z1) (x2,y2,z2) (x3,y3,z3)
0916デフォルトの名無しさん
2009/04/17(金) 02:54:130917デフォルトの名無しさん
2009/04/17(金) 03:08:46同じといえば同じ。
ただし、. と違って常に改行にもマッチする。
否定形で使うと何ともマッチすることのないものになる。
0918デフォルトの名無しさん
2009/04/17(金) 11:48:000919デフォルトの名無しさん
2009/04/17(金) 13:37:24〜以外はなんとなく . が母集合だと思ってた
言われてみれば文字全てが母集合になるのが当然だよなぁ
>>918
( )にキャプチャとグルーピングの両方の意味を持たせたのは失敗だとよく思う
(?: )と逆ならもうちょっとマシだったろうに
ついでに気づいたけどFx3で\bと[\b]が別物なのはおもしろいな
>[\b] バックスペース (backspace) にマッチします。 ( \b と混同しないでください。)
0920デフォルトの名無しさん
2009/04/18(土) 02:53:333Dかよ
0921デフォルトの名無しさん
2009/04/18(土) 03:45:58いつも、文字数が何カチが手t場ぐるの。
助けてくれたらエッチしてあげてもいいよ
0922デフォルトの名無しさん
2009/04/18(土) 07:49:20で書きなおしてくれ。何言ってるかわからん。
0923デフォルトの名無しさん
2009/04/18(土) 07:51:430924デフォルトの名無しさん
2009/04/19(日) 03:46:40環境が判らんと何とも言えんが、ascii以外の文字数を数えようとしているのならエンコーディングがあっていないとか。
0925デフォルトの名無しさん
2009/04/22(水) 00:30:15<(a|b|i|....)+.*>などのように禁止したいHTMLタグを並べるのは非常にめんどうです。
スマートな表現があったら教えてほしいです。
0926デフォルトの名無しさん
2009/04/22(水) 00:31:20追記:PHP 5.2.9.9を使用しています
0927デフォルトの名無しさん
2009/04/23(木) 13:45:51ABC GHI JKL
DEF GHI JKL
上記の文で"ABC"が含まれている行の
"GHI"だけをマッチさせたいのですが
うまくできません、教えてください
使用環境:Flexible Renamer(Perl5互換)
0928デフォルトの名無しさん
2009/04/23(木) 13:51:00GHI ABC GHI GHI とかいう行において全ての GHI にマッチさせて取り出したいのか、とか。
0929デフォルトの名無しさん
2009/04/23(木) 14:50:060930デフォルトの名無しさん
2009/04/23(木) 15:34:46配列かなんかでもっといて|で連結すればいいだろ。頭使えよ
0931デフォルトの名無しさん
2009/04/23(木) 15:53:44このスレは初めてか?使用環境見ろよ
0932デフォルトの名無しさん
2009/04/23(木) 16:11:29>>926
0933デフォルトの名無しさん
2009/04/23(木) 16:11:450934デフォルトの名無しさん
2009/04/23(木) 16:23:44すまんかった
ちょっと掘られてくる
0935デフォルトの名無しさん
2009/04/23(木) 16:37:09/aaa/bbb/
という表記がよく使われるけど
パスを含むツールでは^/とエスケープするのがちょっと面倒なんで
次にメジャーな表記って何かありますか?
|aaa|bbb|
とか
%aaa%bbb%
とか適当に決めちゃえばいいんだろうけどなんかあったら教えてください。
0936デフォルトの名無しさん
2009/04/23(木) 16:45:420937デフォルトの名無しさん
2009/04/23(木) 16:48:270938デフォルトの名無しさん
2009/04/23(木) 17:14:21アスキーコードで現したものを含めるにはどうすればいいですか?
あと文字変数のようなものは使えませんよね?
0939デフォルトの名無しさん
2009/04/23(木) 17:19:480940デフォルトの名無しさん
2009/04/23(木) 17:20:370941デフォルトの名無しさん
2009/04/23(木) 17:30:10s1 = コードの文字
Regex regex = new System.Text.RegularExpressions.Regex(s);
のような感じでできました。
0942デフォルトの名無しさん
2009/04/23(木) 18:25:54ある意味、メタ文字の類は予約語だろ。
0943デフォルトの名無しさん
2009/04/24(金) 01:10:040944927
2009/04/24(金) 01:15:25>ABC GHI JKL
>DEF GHI JKL
>
>上記の文で"ABC"が含まれている行の
>"GHI"だけをマッチさせたいのですが
>うまくできません、教えてください
>使用環境:Flexible Renamer(Perl5互換)
補足です
行にてABC、GHIが出てくるのは1回のみ、複数回はありません
GHIは必ずABCより後ろにきます
説明不足ですみません、よろしくお願いします
0945デフォルトの名無しさん
2009/04/24(金) 15:57:52"GHI" の部分にのみマッチさせるのは正規表現じゃ無理。
リネームするのに "GHI" に当たる部分のみを使いたいってんなら
パーレンでキャプチャすれば何とかなるんじゃない?
0946927
2009/04/24(金) 22:03:50行をマッチさせるのは知っていましたが
"GHI"だけというのは無理なんですね
ありがとうございました
0947デフォルトの名無しさん
2009/04/25(土) 01:07:17perl5互換なら (?:ABC.*)GHI は?
0948デフォルトの名無しさん
2009/04/25(土) 01:18:400949デフォルトの名無しさん
2009/04/25(土) 06:17:41(?<=ABC.*)GHI
だね。
0950デフォルトの名無しさん
2009/04/26(日) 10:48:24禁止したいHTMLタグでは無く
利用しても良いHTMLタグを並べると良い
つまり発想が、逆だ!
0951デフォルトの名無しさん
2009/04/26(日) 13:53:31次のような動作を望んでいます。
<p>
abc
def
</p>
<p>
ghijkl
</p>
↓↓↓
<p>
abc<br />
def<br />
</p>
<p>
ghijk<br />
</p>
0952デフォルトの名無しさん
2009/04/26(日) 14:16:35multiline認識させて、
(?<!\<p\>)$ → \<br \/\> に置換?
戻り読み出来ないエンジンなら、後方参照で
[^(\<p\>)](.)$ → \2\<br \/\> に置換とか。
0953デフォルトの名無しさん
2009/04/26(日) 21:44:13長い文字列A "qwertyuiopzxcvbnmAbcasdfghjkl" から
^ 18
文字列B "ABC"の位置を大文字小文字問わず知りたいです。
C#と javaを使ってるのですが、正規表現ではどのように書けばいいでしょうか?
0954デフォルトの名無しさん
2009/04/26(日) 21:52:080955デフォルトの名無しさん
2009/04/26(日) 22:29:140956デフォルトの名無しさん
2009/04/26(日) 22:34:48ありがとうございます。
indexof とか ismatch とか近いものはあるようなので調べてみます。
0957デフォルトの名無しさん
2009/04/27(月) 19:33:22ほむ、その手でやってみたんですが、こういうケースだとはじけないのでまずいんです。
<a href="aaa" onclick="alert()">test</a><em>aaa</em>
0958デフォルトの名無しさん
2009/04/27(月) 19:40:530959デフォルトの名無しさん
2009/04/27(月) 21:25:21なんか引っ掛かりそうな顔文字
0960デフォルトの名無しさん
2009/04/28(火) 00:19:410961デフォルトの名無しさん
2009/04/29(水) 01:42:19Pattern pattern = Pattern.compile("[qwerty]");
Matcher matcher = pattern.matcher("abcdef");
boolean b= matcher.matches();
これでtrueになりません。どこがいけないでしょうか?
0962デフォルトの名無しさん
2009/04/29(水) 02:21:02"q", "w", "qw" にマッチするか試してみて
0963デフォルトの名無しさん
2009/04/29(水) 03:02:44ドキュメント読もうぜ。
> matches メソッドは、入力シーケンス全体とパターンをマッチする
0964デフォルトの名無しさん
2009/04/29(水) 08:25:03> 領域シーケンスの全体がこの正規表現エンジンのパターンとマッチした場合にのみ true
0965デフォルトの名無しさん
2009/04/29(水) 09:06:15どれか一文字のときはどの命令を使いどう書けばいいのでしょうか。
ググってもたいていmatches の例しかなかったもので。
0966デフォルトの名無しさん
2009/04/29(水) 09:43:02>戻り値:
>入力シーケンスの部分シーケンスがこの正規表現エンジンのパターンとマッチした場合にのみ true
Pattern pattern = Pattern.compile([qwerty]);
Matcher matcher = pattern.matcher("abcdef");
boolean b= matcher.find();
下にあったfind()でやってみたのですがなぜか trueになりませんでした。
0967デフォルトの名無しさん
2009/04/29(水) 09:56:55俺も試したけど find() だとちゃんと true 返したよ。
0968デフォルトの名無しさん
2009/04/29(水) 10:11:28デバッグで見てみるとどうもおかしな行の飛び方をしてるようです。
もうすこし試行錯誤してみます。
0969デフォルトの名無しさん
2009/04/30(木) 19:47:39●正規表現の使用環境
JRE5.0〜上で動作するローカルプロキシ(http://nicolist.net/nicocache_nl/)のFilter、
http://nicolist.net/nicocache_nl/up/img/nl138.txt
●検索か置換か?
検索
●説明
n字以上の任意の文字列をm回以上繰り返す部分がある行を検索
たとえばn=3、m=3としたとき
●対象データ
ABABABABAB
ABCABC
ABCABCABC
DEFGDEFGDEFG
AAABCABCABCCC
●希望する結果
ABABABABAB
ABCABC
ABCABCABC
^^^^^^^^^^^^^
DEFGDEFGDEFG
^^^^^^^^^^^^^^^^^
AAABCABCABCCC
^^^^^^^^^^^^^^^^^^
0970デフォルトの名無しさん
2009/04/30(木) 20:00:50(.{3,})\1{2}
こういうことできるのかな
0971デフォルトの名無しさん
2009/04/30(木) 20:01:190972デフォルトの名無しさん
2009/05/01(金) 15:01:14[0-9]+(\.[0-9]*)? としたところ、入力を
122.33.444
などとすると出力が
122.33 (数字) .(不明) 444(数字)
というようになります。正規表現に不適な場合は全て不明としています。
これを
122.33.444(不明)と出力するようにしたいのですがどうすればいいでしょうか?
0973デフォルトの名無しさん
2009/05/01(金) 15:13:38出力と言われても、何の言語かもわからないよ。
一発で出力するんじゃなくて、マッチしなかった場合にフラグを立てるとかはどう?
んでフラグが立っていた場合に目的の文字列を結合するとか。
>文字を入力してそれが数字かどうか判定したい
のであれば、私だったら型変換で数字型になるかどうかで判定するかな。
0974デフォルトの名無しさん
2009/05/01(金) 15:16:22言語はCです。
マッチしなかった場合にフラグを立てる
で問題なく解決できました。 ありがとうございました。
0976デフォルトの名無しさん
2009/05/07(木) 23:33:47正規表現 Part6
http://pc12.2ch.net/test/read.cgi/tech/1241537764/
0977デフォルトの名無しさん
2009/05/23(土) 05:19:380978デフォルトの名無しさん
2009/05/23(土) 05:20:190979デフォルトの名無しさん
2009/05/23(土) 05:24:040980デフォルトの名無しさん
2009/05/23(土) 05:25:030981デフォルトの名無しさん
2009/05/23(土) 05:25:560982デフォルトの名無しさん
2009/05/23(土) 19:27:120983デフォルトの名無しさん
2009/05/23(土) 20:41:20http://pc12.2ch.net/test/read.cgi/tech/1242313436/
0984デフォルトの名無しさん
2009/05/24(日) 03:38:550985デフォルトの名無しさん
2009/05/24(日) 03:40:210986デフォルトの名無しさん
2009/05/24(日) 03:43:040987デフォルトの名無しさん
2009/05/24(日) 03:43:470988デフォルトの名無しさん
2009/05/24(日) 03:44:290989デフォルトの名無しさん
2009/05/24(日) 08:31:150990デフォルトの名無しさん
2009/05/24(日) 08:32:170991デフォルトの名無しさん
2009/05/24(日) 08:33:110992デフォルトの名無しさん
2009/05/24(日) 08:34:100993デフォルトの名無しさん
2009/05/24(日) 08:35:040994デフォルトの名無しさん
2009/05/24(日) 12:46:540995デフォルトの名無しさん
2009/05/24(日) 12:48:010996デフォルトの名無しさん
2009/05/24(日) 12:48:510997デフォルトの名無しさん
2009/05/24(日) 12:49:510998デフォルトの名無しさん
2009/05/24(日) 12:50:340999デフォルトの名無しさん
2009/05/24(日) 13:02:161000デフォルトの名無しさん
2009/05/24(日) 13:03:3110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。