正規表現道場
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/01/11(木) 02:40:43ID:uW7xEbZY・言語不問
・質問も大歓迎。使用言語を書くのを忘れずに。
正規表現と関係ない話・質問は他スレへどうぞ。
0447nobodyさん
2009/01/19(月) 09:02:38ID:???0448441
2009/01/19(月) 14:17:19ID:???>>442
いまだにh抜きを強要する人っているんだね。
見ず知らずの他人一人一人を啓蒙していくよりも
管理者へ[http://」をNGワードに追加してくれるよう説得した方がいいんじゃないの?
有益であれば受け入れてくれるはず。
0449nobodyさん
2009/01/19(月) 14:46:18ID:???まあがんばってよ。
0451nobodyさん
2009/01/20(火) 03:53:44ID:TjAtrikIhttp〜リンクを見るたび指摘(要望)してしまう442
その指摘(要望)が強要に見えてしまう441
どちらも2chに向かないタイプではあるが
頻度の度合いからして苦労するのは441の方が上だな
公衆便所のトイレットペーパーが三角に折れてなかったらイラっとしちゃうタイプでそ
0452nobodyさん
2009/01/20(火) 04:11:05ID:???スレ違いだから他でやってくれ
0453nobodyさん
2009/01/22(木) 00:53:40ID:2qACQkO/0454nobodyさん
2009/01/22(木) 01:00:03ID:???0457nobodyさん
2009/01/22(木) 17:35:54ID:???-----
上記のような文字列で「*」には日本語と英語が混ざっています。
そこで、、<br>から-までの間から、英語文字だけを削除するような正規表現って無いでしょうか?
<br>から-の部分は改行が入ってます。
ご存知の方居られましたら、よろしくお願いします。
0459nobodyさん
2009/01/22(木) 17:56:19ID:???すみません。言葉足らずでした。
普段Speeeeedをいうソフトを使っているのですが、これで>>457は可能でしょうか?
0461OraOra
2009/02/01(日) 01:57:15ID:2VNzjYUZ分からず困っています。
どなたか御教授お願いします。
プラットフォームはOracleのPL/SQLです。
検索対象は以下の日付書式の文字です。
'yyyymmdd hh24:mi:ss'
以下のように正規表現の結果を関数で受取り
その結果をチェックしています。
bool_result := regexp_like('20080230 11:20:22','(20)[0-9]{2}(0[1-9])|1[0-2])(0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9])');
if bool_result then
dbms_output.put_line('OK');
else
dbms_output.put_line('NG');
end if;
現状では上記の正規表現で'0230'、'0231'のチェックが出来ず困っています。
上記の正規表現の中で'0230'、'0231'も含めてチェックする方法を
ご存知の方いましたらどなたか御教授お願いします。
0462nobodyさん
2009/02/02(月) 21:43:16ID:H9hEncfV「id=""」の数字を抜きたいのですが(この例であれば「72157612930889935」が欲しいです)
$patern = 'id="(.*)" ?';
ereg($patern,$line,$id);
echo $id[1]."<br />\n";
では最後のvideosの終わりのダブルコーテーションまで入ってしまいました。
>>421に近いと思うのですが?で最短マッチ?になるような気もしますし
>>412にあるように?は0か1回の繰り返しのようにも思うし…。
OSはCent4系、PHP4.1.3、関数はeregを使いました。どなたか助けて下さい
0463nobodyさん
2009/02/02(月) 21:51:38ID:???0464462
2009/02/02(月) 21:55:09ID:H9hEncfV神!ありがとうございました。
?は結局使わず終いでしたが?とか難しいのを使うよかよっぽどスマートす。
0465nobodyさん
2009/02/05(木) 13:33:36ID:???0466nobodyさん
2009/02/06(金) 11:54:32ID:???{0,1}か{0,1,2,3...}かの違いだけだ。
0467nobodyさん
2009/02/06(金) 16:00:49ID:???0468nobodyさん
2009/02/10(火) 00:16:26ID:???FtSPPP または FfSPPPP は
F(tS|fSP)P{3} より短くなりますか?
PPP と PPPP ではなく X と Y (Fの直後に来るものによってSの後に来るべきものがまったく違う場合) には応用可能でしょうか?
0469nobodyさん
2009/02/10(火) 00:53:38ID:???0470nobodyさん
2009/02/23(月) 09:51:32ID:0L52Pp6Hこれの意味を教えて下さい。
0471nobodyさん
2009/02/23(月) 10:49:52ID:???「*」は0匹以上の生息してるやつ最後まで
つまり、「.*」でカニがいるだけ全部を捕り尽くすという意味(昨今の乱獲問題)
そこで捕り尽くしたら絶滅するという問題を受けて「.*?」という思想が考え出された
意味は、最初にカニがいたらその一匹を捕まえて漁を止めるということ
0472nobodyさん
2009/02/23(月) 15:41:23ID:0L52Pp6Hでは、 .*? と .? の違いを教えて下さい。
0473nobodyさん
2009/02/23(月) 17:58:21ID:???「.」はカニだな
「?」は捕れるかとれないか分らないがとりあえず努力するという意味
つまり、「.?」で幻のカニ探索するという意味
0474nobodyさん
2009/03/02(月) 19:46:41ID:/g2x4kDhたとえば普通に
http://google.co.jpと書いてあるものと
<a href="http://google.co.jp">test</a>と書いてある文字列があります。
この文字列内のタグになってないUrlをAタグでリンクを張りたいんですがどうしたらいいでしょうか。
0475nobodyさん
2009/03/02(月) 21:22:30ID:???0477nobodyさん
2009/03/11(水) 00:46:27ID:???これを正規表現にすると、どうなりますか?
0478nobodyさん
2009/03/11(水) 01:27:39ID:???0479nobodyさん
2009/03/11(水) 11:15:58ID:???"{^https?://[0-9a-zA-Z]*\.2ch\.net/[0-9a-zA-Z]*/test/bbs\.cgi[0-9a-zA-Z/_-]*$}"
0480nobodyさん
2009/03/20(金) 02:34:11ID:???例 class.test.php から public function test($a){ 本文 }
スケルトンコードの場合簡単に抜き出せるのですが、
本文中にif,swichなどで } が存在した場合どうすれば良いのか悩んでいます。
0481nobodyさん
2009/03/20(金) 04:11:43ID:???0482nobodyさん
2009/03/20(金) 22:15:43ID:???BoostライブラリBoost.Xpressiveか、Boost.Regexか、Boost.Spirit
です。(標準C++,コンパイラg++。)
括弧の対応のバランスがとれているならマッチさせるという正規表現はどう書けますか?
boost::xpressive::sregex parens;
parens = *( '(' >> by_ref(parens) >> ')' );
だと
()→マッチ
()()→マッチ
()(()((()))())→マッチ
(()))))→マッチしない
です。
私としては(1+3)*(4+(8-9))の様に括弧以外の文字が含まれていても括弧のバランスがとれているか判定できるようにしたいのですが。
ただし括弧としては ( か ) だけを想定し、{}[]などは判定の対象にはせず、数式として成り立っているかどうかなども判定せず、あくまで ( と ) のバランスだけを見たいです。
0483nobodyさん
2009/03/20(金) 22:25:59ID:???できました、ありがとうございました。
こんな感じで、簡単でしたね、、、
/function test.*?\{.*? (\{.*?\}.*?)*? \}/s
0484nobodyさん
2009/03/20(金) 23:13:32ID:???これでほぼ完璧かなぁ、、、
/public\sfunction\stest_if_text.*?\{.*?(\{.*?("(.*?\{*?.*?|.*?\}*?.*?)*?".*?)*?\}.*?)*?\}/s
0485nobodyさん
2009/03/20(金) 23:18:29ID:???ムダがおおい
0486nobodyさん
2009/03/20(金) 23:28:45ID:???/[public|private|protected]+\s+[static]?\s?function\s+関数名.*?\{.*?(\{.*?("(.*?\{*?.*?|.*?\}*?.*?)*?".*?)*?\}.*?)*?\}/s
こんな感じかなw
読みやすさ優先で記述してるからセンスは勘弁してくださいw
0488nobodyさん
2009/03/24(火) 09:59:04ID:???正規表現じゃ数学的に不可能。有限状態オートマトンなので閉じられてない
開きカッコの数を高々状態数までしか憶えられないからそれを越えた時点で
アウト。
Perlの正規表現みたいに再帰的なパターンが書けるように拡張されてると
別だけどね。
0489487
2009/03/24(火) 10:07:28ID:???BoostのXpressiveならby_ref()があるから再帰的に書けないこともないハズ。
でもよーわからん。
Spiritが使えるならそっちのが楽そうじゃね?
0490nobodyさん
2009/03/24(火) 10:20:21ID:???0491nobodyさん
2009/03/24(火) 10:38:59ID:???0493nobodyさん
2009/03/24(火) 12:16:31ID:???いくらなんでもゆとりすぎるだろ
0494nobodyさん
2009/03/25(水) 10:08:36ID:???x{9}x+
と
x{10}x*
は共に等価でOKだとおもうが、
一般論で言うとどちらが速い動作になる?
0495nobodyさん
2009/03/25(水) 10:43:53ID:???それよりももう少し改良できると思うんだがな
0496nobodyさん
2009/03/25(水) 12:38:18ID:???どっちを食わせても全く同じオートマトンに変換してから実行するの
でぴったり同じになる実装、なんてのもあるかもしれないし、
逆になぜか+が不得意な実装とか*が不得意な実装とかあるかも
しれない。モノによっては{..}が不得意でxを並べたほうがいいと
いうことも考えられるな。
0498中山
2009/03/29(日) 09:39:01ID:MqxV8vA3$str = 'test1?test2/test3;test4';
この文字の
test1
test2
test3
test4
を取り出すにはどうしたらよいでしょうか?
この価を
data1=test1&data2=test2&data3=test3&data4=test4
と変換したいです
preg_replaceを使っています
$str = preg_replace("・^([a-zA-Z0-9]+\?+[a-zA-Z0-9]+)\/+[a-zA-Z0-9];+[a-zA-Z0-9)$・","data1=$1&data2=$2&data3=$3&data4=$4",$str));
これではダメみたいです
0499nobodyさん
2009/03/29(日) 09:49:02ID:???0500nobodyさん
2009/03/29(日) 09:54:22ID:???この内容がどういうパターンで変動し得るかがわからん
書かれている正規表現見てみると ? / ; の順に区切り文字があることは固定で決まってる?
0501中山
2009/03/29(日) 19:51:10ID:MqxV8vA3ただし、
test1
などの文字列は半角英数字限定です。
0503nobodyさん
2009/04/14(火) 19:16:36ID:???どうかけばいいのでしょうか
onMouseOver="refPopUp(1,event)" onMouseOut="hidePop()"
onMouseOver="refPopUp(23,event)" onMouseOut="hidePop()"
onMouseOver="refPopUp(345,event)" onMouseOut="hidePop()"
↓
3行すべて削除
試した正規表現
onMouseOver="refPopUp(\d+{1,3}.,event)" onMouseOut="hidePop()"
0504nobodyさん
2009/04/14(火) 19:24:30ID:???0505nobodyさん
2009/04/14(火) 19:31:15ID:???すまんこ
一応自力解決しました。さくらエディタの正規表現オンで動作確認
onMouseOver="refPopUp\(\d{1,3},event\)" onMouseOut="hidePop\(\)"
0506nobodyさん
2009/04/14(火) 20:09:33ID:???正規表現を用いた1度の置換で消せますか?
<dd><font style="font-size:;color:;"> テスト <br> テスト </font><br><br></dd>
<dd><font style="font-size:;color:;"> テスト2 <br> テスト2 </font><br><br></dd>
考え方として
<dd><font style="font-size:;color:;">がある行のうち</font>を削除し、そのあと<font style="font-size:;color:;">を削除
これで行けそうかと思ったのですが、●●がある行のうち○○を削除、という正規表現がわかりませんでした・・・
0507nobodyさん
2009/04/16(木) 23:48:40ID:???(.*)<font style="font-size:;color:;">(.*)<\/font>(.*)
$1$2$3
とすればいいんじゃない。
どこの正規表現を使うかによりできないかもしれないけど。
$nはn番目の括弧に該当するから<font style="font-size:;color:;">と</font>が消える。
<font></font>がネスとしているなど複数あったら駄目かもしれないけど。
0509nobodyさん
2009/04/25(土) 21:30:02ID:???( )
ノω|
0510nobodyさん
2009/04/29(水) 05:47:07ID:???0511nobodyさん
2009/05/12(火) 06:32:22ID:???12??34
違いが出るときはどんなときか答えなさい
0512nobodyさん
2009/05/18(月) 16:49:08ID:???のような、固定文字列aaaの後ろに『(’nnnnn;』(nの部分は必ず半角数字で値と文字数は可変。’は全角)となる箇所がうじゃうじゃあり、
この文字列の数字を挟んでいる記号だけを全て削除したいのですが、しっくりくる正規表現が浮かびません
妙案ないでしょうか
php5 or 4
0513nobodyさん
2009/05/18(月) 22:40:33ID:???$txt = aaa(’12165;
$txt = aaa(’5445;
$txt = aba(’13;
$txt = aaa(’99999;
こうなんか?
結果 = preg_replace('/’(\d+);/', '$1', 入力);
結果
$txt = 12165
$txt = 5445
$txt = aba(’13;
$txt = 99999
0514nobodyさん
2009/05/21(木) 08:03:14ID:bdo2M1uu曲名のリストを一括置換しようとしています。具体的には"〜 by"が
入る丸括弧だけ四角括弧"[ ]"に置き換えたいのです。
例
This is me (talk) (Composed by Johan)
↓
This is me (talk) [Composed by Johan]
どのような書式にすればいいかご教示お願いします。
0515nobodyさん
2009/05/21(木) 08:25:36ID:???書き方も全然違ってくるからね、その質問だけじゃなんとも言えないのね。
初心者用のサイトにいってらっしゃいなのね。
図解でみる正規表現入門
http://funcchan.blog16.fc2.com/
0516nobodyさん
2009/05/21(木) 08:34:21ID:???$s=~ s/\(([^\)]*\bby\b[^\)]*)\)/[$1]/gi;
0517nobodyさん
2009/05/21(木) 09:43:06ID:???ありがとうございます。
STEPというタグエディタで100曲ほど一括置換しようと
目論んでます。
教えていただいたサイトとスクリプトを手がかりに
現在悪戦苦闘中です。ちょっと頑張ってみます。
0518nobodyさん
2009/05/23(土) 22:18:11ID:???special days(arranged by hor version.) (Composed by Ellic)
0519nobodyさん
2009/05/27(水) 00:18:24ID:???ABC
…LMNO………
……LMNO……
………LMNO…
XYZ
というような文章があったとします。
「LMNO」の前後(「…」)には文字(日本語や英数字)があります。
Perl5互換の正規表現が使えるテキストエディタや、BREGEXP.DLLが使える置換えソフトを使用し、
「ABC」から「XYZ」までにある「LMNO」を「OOOO」に置換えすることは可能でしょうか?
特定の範囲内の文字だけを置換えする正規表現がわからず、検索文字列と置換え文字列の指定で困っています。
どのようにすれば良いのか教えて頂けると助かります。よろしくお願いします。
0520nobodyさん
2009/05/27(水) 22:50:49ID:???ってことか?
0521519
2009/05/29(金) 23:05:57ID:???具体的な指定を教えて頂いてありがとうございました。
早速試したのですが置換えできませんでした。
「Speeeeed」という置換えソフトではBREGEXP.DLLも使えるのですが、それでも置換え結果がゼロのままです。
こちらのスレをもう一度読み返してもっと正規表現を勉強したいと思います。
0522nobodyさん
2009/06/07(日) 21:54:50ID:???これを何回もかけるとか?
なんか知らんけどgオプションつけても無駄だったんだよなぁ
0524nobodyさん
2009/06/12(金) 11:14:20ID:???0525nobodyさん
2009/06/13(土) 23:07:31ID:56/XckFTyyyy/mm/entry-basename/index.php
↑はどのように記述すればいいのか、お手数ですがご教授願います<(_ _)>
0526nobodyさん
2009/06/14(日) 09:14:31ID:???yyyy部分が4桁数字の西暦?
mm部分が2桁数字の月(ゼロサプレス)?
m#^\d{4}/\d\d/entry-basename/index\.php$#
0527525
2009/06/14(日) 17:21:47ID:Ycy68Wtw素人で質問が下手くそで申し訳有りません
↓の場合だと
"/diary/archives/yyyy/mm/entry_basename.php"
"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"
↑のように置き換えるみたいなのですが、
同様に↓の場合だと
"yyyy/mm/entry-basename/index.php"
どのように置き換えるのかが分からなくて、お手数ですがご教授下さい。
分かりにくくて申し訳ないです。
0528nobodyさん
2009/06/14(日) 21:15:28ID:???> ↑のように置き換えるみたいなのですが、
「置き換える」って、いわゆる正規表現による置換処理の意味じゃなくて
「検索表現に翻訳する」って意味なのか。凄まじく紛らわしい。
さておき…、
で、どの単語が可変部分なのかがさっぱり分かんないんだよね。
"index.php" は固定なの?
それと、上の置き換え例では "entry_basename" になっているけど
お尋ねの件は "entry-basename" だよね。単なる typo かな?
"\w" を使う上では、検索対象文字列の "_" と "-" との違いは本質的だよ。
要するに、質問するにしては不備が多過ぎます。
0529525
2009/06/14(日) 23:33:00ID:Ycy68Wtw「検索表現に翻訳する」という意味です。失礼しました
そして"index.php"は固定で、"entry-basename"が正解です。
http://www.magicvox.net/archive/2005/05261744/
ここのページにあるランキングが利用したいのですが、
「ランキング集計したいファイル名にマッチするよう Perl の正規表現
を修正してください。」
ここの意味が分からなくて困っています。他のサイトなどを見てみると、
当方の個別エントリーパスは"/diary/archives/yyyy/mm/entry_basename.php"なわけですので、
"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"としました。
とあります。
私の場合、エントリーパスは"yyyy/mm/entry-basename/index.php"です。
これを"/^\/diary\/archives\/\d{4}\/\d{2}\/(\w+)\.php/"のように記述
するにはどうすればいいのでしょうか?
長文失礼しました。
0530nobodyさん
2009/06/15(月) 00:03:48ID:???謎すぎるけど PHP の preg 使って entry_basename を $1 に入れるんだと
思い込んでみた
0531nobodyさん
2009/06/15(月) 00:06:02ID:???「ここにいろんな文字列が入ります」っつーダミーなんだろうけど、
どういった文字で構成されるの?
0532nobodyさん
2009/07/05(日) 16:07:10ID:???2009/1/1
↓
2009/01/01
に一行で置換したいのですが。
s|/([0-9][^0-9])|/0$1|gm;
だと、2回同じ処理が必要になってしまいます。
いい方法ありますか?
0533nobodyさん
2009/07/05(日) 16:12:40ID:???0534nobodyさん
2009/07/05(日) 17:05:36ID:???後ろの1文字ってマッチする?
マッチするなら
1 while $str =~ s|/([0-9][^0-9])|/0$1|gm;
でいけるんじゃない
0535nobodyさん
2009/07/05(日) 17:40:16ID:???0537nobodyさん
2009/07/05(日) 18:27:53ID:???0538nobodyさん
2009/07/08(水) 01:27:46ID:???0539nobodyさん
2009/07/15(水) 09:40:19ID:???どう表現すればいいのでしょうか。
以下の例だと、font-size:の部分です。
h1 {
font-size: 150% !important;
}
0541nobodyさん
2009/07/15(水) 14:47:39ID:???見やすくなりました!
:first-childや:notのセレクタで誤爆していたので
[\-a-za-z0-9]+[ \t]*:(?!\first|last|not)
としました。
また以下のようなものだと誤爆するみたいですが
これはほとんど使わないので目をつむろうと思いますw
BODY[style="width: 100%; height: 100%;"] {
font-size: 150% !important;
}
0542nobodyさん
2009/07/15(水) 15:14:34ID:???[\-a-za-z0-9]+[ \t]*:(?!first|last|not|hover|focas|active|visited|link|lang|after|before)
0543nobodyさん
2009/07/15(水) 23:25:43ID:2a7dmfqp0544nobodyさん
2009/07/22(水) 16:01:40ID:???正規表現初心者です。
秀丸で、正規表現を使って文字列の置換をしようとしています。
例)
abcd,efag),
これを最初の[,]だけを[',]に置換したいと思っています。
検索文字列: [^)],
置換文字列: ',
とすると、
abc',efag),
のように文字列の後ろの1文字まで消えてしまいます。
文字列が消えないように、最後尾でない[,]だけを置換するにはどのように指定すればいいでしょうか。
教えてください。
0545nobodyさん
2009/07/24(金) 05:32:15ID:???候補 1(質問者の方針参考)
検索文字列: ([^)]),
置換文字列: $1',
候補 2
検索文字列: ,(?!$)
置換文字列: ',
無理なら一旦「,\n」を「,」を含まない別の適当な文字列に変換して、
全ての「,」を「',」に変換してから元に戻すとか。
■ このスレッドは過去ログ倉庫に格納されています