[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/03 06:01 / Filesize : 179 KB / Number-of Response : 640
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現道場



1 名前:nobodyさん [2007/01/11(木) 02:40:43 ID:uW7xEbZY]
【正規表現道場の掟】

・言語不問

・質問も大歓迎。使用言語を書くのを忘れずに。

正規表現と関係ない話・質問は他スレへどうぞ。

312 名前:nobodyさん mailto:sage [2008/06/28(土) 10:12:28 ID:???]
substr_replaceとstrposでできそうな気がするが

313 名前:311 mailto:sage [2008/06/28(土) 12:26:16 ID:???]
>>312
ありがとうございます、おかげで解決しました!

314 名前:nobodyさん mailto:sage [2008/07/02(水) 18:58:36 ID:???]
,"/web/sendmail.php","10","10","2000"
こういう感じの文章の
,"2000"
のみ抽出したいんですが、どう書けばいいんでしょうか?

",".*[0-9]"$
だと"10","10","2000"まで拾っちゃうんです・・・。

315 名前:nobodyさん mailto:sage [2008/07/02(水) 21:54:01 ID:???]
,\"[0-9]{4}\"

316 名前:314 mailto:sage [2008/07/03(木) 15:40:28 ID:???]
>>315
ありがとうございます。
確かに、それで例は拾えましたが、10と2000の部分は変動するんです。
桁も4桁だったり5桁だったりと様々なので、どうしたもんかなと・・・。

317 名前:nobodyさん mailto:sage [2008/07/03(木) 15:46:05 ID:???]
,\"[1-9][0-9]*\"

318 名前:314 mailto:sage [2008/07/03(木) 15:53:01 ID:???]
>>317
ありがとうございます。

それだと ,"10","10","2000" まで拾ってしまいます・・・。
書き忘れていましたが、秀丸を使って一括選択しています。

319 名前:nobodyさん mailto:sage [2008/07/03(木) 16:04:08 ID:???]
> 10と2000の部分は変動するんです

どう変動するんだよ
とり出したい場所の条件を日本語で書いてみ

>315を5桁にも対応させるだけなら
,\"[0-9]{4,5}\"

320 名前:nobodyさん mailto:sage [2008/07/03(木) 16:05:46 ID:???]
>>318
,\"[1-9][0-9]*\"$




321 名前:314 mailto:sage [2008/07/03(木) 16:14:35 ID:???]
>>320
ありがとうございます!!!出来ました!!!
ありがとうございましたー。

>>319
ありがとうございます。
>>320で解決しましたが、極端な話1〜99999999の間で変動します。

322 名前:nobodyさん mailto:sage [2008/07/03(木) 16:21:37 ID:???]
>>321
自然数と言え

323 名前:nobodyさん mailto:sage [2008/07/03(木) 18:01:39 ID:???]
314 は情報小出し厨という事が解ったから、はやく死ね

324 名前:nobodyさん mailto:sage [2008/07/03(木) 19:43:29 ID:???]
そもそも正規表現スレで「こういう感じの文章」なんて質問する時点で(ry

325 名前:nobodyさん mailto:sage [2008/07/03(木) 20:01:56 ID:???]
抽象的な表現の質問はスルー

326 名前:PHP [2008/07/04(金) 18:37:34 ID:DM0Om0jz]
PHP 正規表現

PHPの正規表現を勉強しているのですが、どうもうまくいきません。今回は一番簡単な正規表現をつくったのですが、どうやったらよいのでしょうか。

$h = '(名前)様の会員IDは(abc12)で、(5)番目に偉い方です。';

とあったら、名前、会員ID、番号を抜き出すには、どのようにしたらよいのでしょうか?
実際に()は使用しません。
また、$1 や $2 などを使いたいのですが、解説までできればお願いしたいです。
一応自分なりに考えました。
preg_match('/^*.([a-zA-Z0-9]){2}([0-9]+)','名前$2.ID$1 $3 番目に偉い');
()を使えば、2つマッチさせたいときなどに分けることができるのでしょうか?
(名前)様は(数字)
例:太郎様は5

このとき太郎様という日本語の文字を取得するには/^(+.)([0-9])$/

ここで名前は$1になり、数字は$2になるのでしょうか?
どのような時に$1や$2がどっちがどっちなのかは、どのようにしたらわかるのでしょうか?


長々した質問すいません。わかるかた教えてください。

327 名前:nobodyさん mailto:sage [2008/07/04(金) 23:02:41 ID:???]
www.php.net/manual/ja/book.pcre.php

取り敢えず、ここを *よく読んで理解* しろ。

328 名前:nobodyさん [2008/07/15(火) 00:11:32 ID:PMHjKbcP]
質問させて下さい。
PHP5を使っています。
PHPの正規表現関数を使ってデータを取得しようと思っているのですが上手くいきません
<INPUT maxLength=20 name=id value="">
このような文字列を対象に、文字列「type」が含まれていない場合、後方の「maxLength=20 name=id value=""」
を取得したいのです。
全文に対して繰り返し取得したいのでpreg_match_allを使っています。

preg_match_all( "/<input (^type)[^<](.*?)>/is", $data, $matchs )
このように書いたのですがヒットしてくれません。
ドキュメントを見ると、特定文字に関しては[^a-z]のような書き方で対応できるのですが
文字列に関してはどのようにすればよいのでしょうか?
アドバイス頂ければ幸いです。
宜しくお願い致します。

329 名前:nobodyさん mailto:sage [2008/07/15(火) 02:02:18 ID:???]
>>328

悪いこたいわないから二段階で抽出しとけ。
先読みを使えば書けないこともないけど、メンテできなくなるぞw


330 名前:328 [2008/07/15(火) 03:07:47 ID:PMHjKbcP]
>>329
レス有り難う御座います。
一段階目は
preg_match_all( "/(<input 「typeを含まない文字列にマッチするような正規表現」[^<]>)/is", $data, $matchs )
となると思うのですが、この部分はどのようにして書けばよいのでしょうか?
はじめ、二段階抽出も考えたのですが、結局
「typeを含まない文字列にマッチするような正規表現」がどうしてもわからずでした。



331 名前:328 mailto:sage [2008/07/15(火) 08:05:16 ID:???]
自己レスですが、夜通し色々試していたらいけました。
お騒がせしました。
取りあえず、該当範囲をpreg_match_allで取得後、preg_matchでtypeがあるか判定して二段回抽出しました。

332 名前:nobodyさん [2008/07/17(木) 17:35:14 ID:LcfXPY+p]
<<が出てきて、その後初めて<br><br>が出るところまでのマッチ方法を教えてください。
pregです。

例えば、
hogehoge<<hogehogeh<br>oge<br><br>hogehoge<br><br>hoge<<hoge の
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~    の部分です。

333 名前:nobodyさん mailto:sage [2008/07/17(木) 17:53:17 ID:???]
<<.*?<br><br>

334 名前:332 mailto:sage [2008/07/19(土) 19:22:36 ID:???]
>>333
333おめです
なぜか、
hoge<<hogehog
eh<br>oge<br><br>hoge
だとマッチしないのですが。

335 名前:nobodyさん mailto:sage [2008/07/19(土) 19:32:09 ID:???]
<<【¥S¥s】*?<br><br>

336 名前:nobodyさん mailto:sage [2008/07/20(日) 09:34:06 ID:???]
できました。スマソ

337 名前:nobodyさん mailto:sage [2008/07/20(日) 11:43:35 ID:???]
携帯絵文字をすべて
「絵」に置き換えすることはできないのでしょうか?
preg_replace("/[ - ]/","絵",$hoge);

338 名前:nobodyさん [2008/07/20(日) 12:01:15 ID:LU799vx+]
>>337
キャリアは?

339 名前:nobodyさん mailto:sage [2008/07/20(日) 12:03:54 ID:???]
>>338
SoftBankです。
余裕があればau,DoCoMoもですが。。。

340 名前:nobodyさん mailto:sage [2008/07/20(日) 12:18:57 ID:???]
>>337
置き換える事はできるけど、正規表現だけでは無理



341 名前:nobodyさん mailto:お願いします [2008/07/20(日) 12:27:01 ID:???]
>>340では、正規表現以外のものもOKなので、
教えていただきたいです。

342 名前:nobodyさん mailto:sage [2008/07/20(日) 13:09:57 ID:???]
絵文字 変換 preg とかでググればいくらでも出てくるだろ。。。
ここで聞くより100倍速い。

343 名前:nobodyさん [2008/07/24(木) 00:50:31 ID:/c2OsNI4]
example.htmlに書かれた
<table>

344 名前:nobodyさん [2008/07/24(木) 00:58:57 ID:/c2OsNI4]
>>343
誤爆した。。申し訳ない。。
example.htmlに書かれた
<table>
<tr><th>2ちゃんねる</th><td>WebProg板</td></tr>
</table>
をphpのfopen, fgetsで1行ずつ読み取っています。
<tr>から始まった行の「2ちゃんねる」とWebProg板「WebProg」部分のみ抽出したいので
preg_replace("/^<tr><th>(.*?)</th><td>([a-zA-Z])</td>/i","$1$2",$str);
としたのですが、うまく抽出できません。
アドバイスをいただければありがたいです

345 名前:nobodyさん mailto:sage [2008/07/24(木) 01:43:31 ID:???]
/^<tr><th>(.*?)</th><td>([a-zA-Z])</td>/i

正規表現が / で始まってるから / で終わることになるわけだけど、途中に</th>ってのがあるわけよ

m#<t[dh][^>]*>(.*?)</t[dh]><t[dh][^>]*>(\w+)#i
こんな感じになるかな

346 名前:nobodyさん mailto:sage [2008/07/24(木) 23:33:27 ID:???]
デリミタの問題だけじゃないの?
preg_replace("/^<tr><th>(.*?)<\/th><td>([a-zA-Z])<\/td>/i","$1$2",$str);


347 名前:nobodyさん mailto:sage [2008/07/25(金) 08:54:32 ID:???]
これって[a-zA-Z]、[a-zA-Z]+こうしなくてもいいの?

348 名前:nobodyさん [2008/07/27(日) 01:11:32 ID:sEx2Pn85]
質問させてください。

サクラエディタに鬼車5.9.1を搭載して正規表現の勉強をしているのですが、手元にある詳説正規表現には

(<)?\w+(?(1)>)

このような例があり、<があれば>のマッチを試みる?ということができるみたいです。

ただ、鬼車はこの表現をサポートしていないみたいです。
www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt

同様のことを鬼車でも実現する方法ってあるのでしょうか?

349 名前:nobodyさん mailto:sage [2008/07/29(火) 05:43:25 ID:???]
一番最初に出てきた「=」だけ反応するにはどうしたらいいでしょうか。
C#です。

350 名前:nobodyさん mailto:sage [2008/07/29(火) 19:46:22 ID:???]
行頭の=という意味なら
/^=/m
だけどC#での正規表現の使い方は知らんので応えられん。



351 名前:nobodyさん [2008/08/06(水) 01:01:06 ID:hVakYDWk]
PHP5覚えたての初心者です
スレ冒頭に()と(?:)の違いについて質問されてましたが
?:の意味ってなんですか?
わかりやすい解説ページなどもあれば教えてください。

352 名前:nobodyさん mailto:sage [2008/08/06(水) 02:34:12 ID:???]
google

353 名前:nobodyさん mailto:sage [2008/08/06(水) 19:40:10 ID:???]
>>351
?:じゃ?と:だよ。
(?:〜)で意味をなす。

354 名前:nobodyさん [2008/08/21(木) 14:34:46 ID:wSsr/o3s]
質問させて下さい。
PHP5を使用しています。
文字列内にマルチバイト文字が一つでも含まれていれば真と言う正規表現を行いたいのですが
どのようにすればよいでしょうか?
ドキュメント等から調べてみて、
mb_ereg("[0-9a−zA−Zあ−んア−ン]", $str )
のようにしてみたのですが、これでは漢字にヒットしません。

アドバイス頂ければ幸いです。
宜しくお願い致します。

355 名前:nobodyさん mailto:sage [2008/08/21(木) 14:44:38 ID:???]
単純に先頭ビットがおったってるかどうか見ればよくない?

[\x80-\xff]

356 名前:nobodyさん mailto:sage [2008/08/21(木) 15:28:45 ID:???]
>>355
ありがとうございます。
やってみます。

357 名前:nobodyさん mailto:sage [2008/08/22(金) 02:32:16 ID:???]
>>354
1バイト文字を列挙したのを否定すれば?

あと、文字コードによっては半角カナがマルチバイトだったり
そうじゃなかったりするんだけど、どうするのかな?


358 名前:nobodyさん [2008/08/25(月) 10:35:16 ID:P/JycA8t]
htmlのタグを削除するのに、ふつうは
$line =~ s/<\/?[^>]+>//g; ----(1)

だと思うけど、どこかで見た方法では、

$line =~ s/<[^>]*(>|$)//g; ----(2)
となってた。これ動作は同じなのかな?(2)の意味がイマイチ分からない。

359 名前:nobodyさん mailto:sage [2008/08/25(月) 20:52:33 ID:???]
(1)の \/? は書いても意味ない(/は[^>]に含まれるから)
(2)の (>|$)は、$lineという変数名から推測するに行単位で読み込んで逐次処理した
場合に、タグの途中で改行されていて>が見つからなくても行末まで削除する為?
でもそうしたら次の行で処理がうまく行われないしよくわからん

行単位だとタグ途中で改行される場合もあるから全部読み込んで一気に処理がいい
s/<.*?>//g;
s/<[^>]*>//g;
などなど・・

360 名前:359 mailto:sage [2008/08/25(月) 21:09:55 ID:???]
間違った、s/<.*?>//g;だと改行に対応できないから
s/<[\s\S]*?>//;みたいになるね



361 名前:nobodyさん mailto:sage [2008/08/25(月) 21:28:12 ID:???]
いや、s使うだろ、普通。

362 名前:nobodyさん mailto:sage [2008/08/25(月) 22:34:46 ID:???]
>>358
(2)はSGMLのショートタグの対応とか?
ttp://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/appendix/notes.html#h-B.3.7

開始タグで前のタグを閉じる以外は、メジャーなブラウザは対応してなかったはずなので、
あまりこだわらなくてもいいと思うけど。

363 名前:358 mailto:sage [2008/08/25(月) 23:08:43 ID:???]
ありがとうございました。
改行文字の件とか、勉強になりました。
プログラム上では、どちらも同じ動作なので、気になってたもので。


364 名前:nobodyさん [2008/08/27(水) 15:31:16 ID:j0h2/LpG]
正規表現で悩んでいます。
preg_match_all( "/((aaa|bbb|ccc).*?)(aaa|bbb|ccc|$)/is", $str, $maches )

このような形にて以下のような内容の繰り返し文を部分的に抜き出そうとしているのですが一部上手くいきません

---------------------
aaa
あいうえお

bbb
かきくけこ

ccc
さしすせそ
---------------------
上記正規表現では
aaa
あいうえお

bb
かきくけこ

cc
さしすせそ
と言うように一つ目以降のパターンマッチ文字列の先頭がbbやccとして一文字かけてしまいます。
本来はbbb、cccとちゃんとヒットさせたいのですが、これが行えません。
マッチ後の文字列ポインタを「三歩歩いて二歩下がる」のようにずらす事をするか、何か他のパターンマッチ構文を
書けばいけそうだと思うのですが、どうにもよい方法が思いつきません。
お力添え頂ければ幸いです。

365 名前:nobodyさん mailto:sage [2008/08/28(木) 12:04:03 ID:???]
テストしてあげるからそのままコピペできるコードに書き換えてここに載せて

366 名前:nobodyさん [2008/08/28(木) 18:14:41 ID:Gzy07epa]
あいうえお かきくけこ
さしすせ そたちつてと
なに ぬねの はひふへほ

この
「あいうえお」「さしすせ」「なに」
を太字に置き換えるにはどうすればいいですか?
(PHP)

$hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge);

じゃうまくいきません。。。

367 名前:366 mailto:sage [2008/08/28(木) 18:25:55 ID:???]
すいません。
自己解決しました。

368 名前:nobodyさん mailto:sage [2008/08/28(木) 18:44:08 ID:???]
解決策を書いて下さい。

369 名前:nobodyさん mailto:sage [2008/08/28(木) 18:50:35 ID:???]
いやぁ

$hoge = preg_replace("/^([^ ]+)/m","<b>\\1</b>",$hoge);
$hoge = str_replace("<br>","<br>\n",$hoge);

って書いてましたwww

370 名前:364 [2008/08/29(金) 11:10:56 ID:rNMP0NTC]
>>365
レスありがとうございます。
もう一度考え直してみて書き直すとこのようなコードになりましたPHP5になります。

// 対象文字列
$str = "ABCDaaaEFGaaaaHIJKaaaaa";

// 正規表現
preg_match_all( "/([A-Z]+?aaa.*?)([A-Z]|$)/is", $str, $maches );

// 結果表示
$c = count( $maches[1] );
for ( $i = 0; $i < $c; $i++ ) {
print "=> {$maches[1][$i]}\n";
}

=> ABCDaaa
=> FGaaa
=> HIJKaaa

これを
=> ABCDaaa
=> FGaaaa
=> HIJKaaaaa

と表示させたいのです。
どうか宜しくお願い致します。



371 名前:nobodyさん mailto:sage [2008/08/29(金) 11:57:14 ID:???]
以前と仕様変わってるようだけど・・・
詳しい仕様を書いてないからわからんけど

先頭が一つ以上の?英大文字がつづくだけマッチして
次にa小文字が3つ以上?つづくだけマッチ
を繰り返すってこと? isオプションがあるのはどういうことかわからんが
/([A-Z]+aaa+)/

372 名前:364 mailto:sage [2008/08/29(金) 12:11:28 ID:???]
>>371
・・・!申し訳ありません。
色々考えて試している内に頭が混乱して有らぬ方向になってしまっていたみたいです。
ちゃんともう一度考えて仕様も伝えられるようにしてから書き込ませて頂きます。
お手間をおかけいたしましてすみません><

373 名前:nobodyさん mailto:sage [2008/08/29(金) 12:39:10 ID:???]
新入社員の研修みたいでほほえましい。

374 名前:nobodyさん [2008/09/01(月) 15:52:31 ID:ME+mffWY]
使用言語はPHP4です。
PHPスレから誘導されて来ました。よろしくお願いします。

$str = '<a href="entry-1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3-18.html">パイナップル</a>  <br />';

この文字列の中からリンク先の特定の数字とリンクテキストを抽出したく
preg_match_all ( "/"."<a href=\"entry-(.*)-18\.html\">(.*)<\/a>"."/i", $str, $match );
このような正規表現を書いたのですが、実行結果は

[0] => Array
(
[0] => <a href="entry-1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3-18.html">パイナップル</a>

)

[1] => Array
(
[0] => 1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3
)

[2] => Array
(
[0] => パイナップル
)

となります。

375 名前:nobodyさん [2008/09/01(月) 15:53:28 ID:ME+mffWY]
下記のような実行結果にしたいのですが、正規表現の書き方を教えて下さい。よろしくお願いします。

[0] => Array
(
[0] => <a href="entry-1-18.html">りんご</a>  <br /><a href="entry-2-18.html">バナナ</a>  <br /><a href="entry-3-18.html">パイナップル</a>

)

[1] => Array
(
[0] => 1
[1] => 2
[2] => 3
)

[2] => Array
(
[0] => りんご
[1] => バナナ
[2] => パイナップル
)

376 名前:nobodyさん mailto:sage [2008/09/02(火) 00:14:52 ID:???]
<a href="entry-(\d+)-18.html">(.*?)</a>

377 名前:nobodyさん [2008/09/02(火) 09:20:23 ID:gwaiq/Cc]
>>376
うまく動きました
ありがとうございました

378 名前:nobodyさん [2008/09/02(火) 17:55:54 ID:IiWNBMxF]
バイオインフォマティックスに詳しい方いらっしゃいますか?perlを使って突然変異前後における終止コドンのカウントをしたいんですが、初心者なのでまったく分かりません・・・(涙)


379 名前:nobodyさん mailto:sage [2008/09/02(火) 18:31:39 ID:???]
先頭にhttpまたはttpを含まない
という正規表現はどう書けばいいでしょうか

380 名前:nobodyさん mailto:sage [2008/09/02(火) 18:35:50 ID:???]
!/^h?ttp/



381 名前:nobodyさん mailto:sage [2008/09/02(火) 18:37:44 ID:???]
^([^ht]|h([^t]|t([^t]|t[^p]))|t([^t]|t[^p])))

382 名前:nobodyさん mailto:sage [2008/09/02(火) 19:18:50 ID:???]
>>380
>>381
助かりました
有難うございました

383 名前:nobodyさん mailto:sage [2008/09/03(水) 09:02:07 ID:???]
^([^ht]|h([^t]|t([^t]|t[^p]))|t([^t]|t[^p])))

だとhとかttにマッチしない罠。

^($|[^ht]|h($|[^t]|t($|[^t]|t($|[^p])))|t($|[^t]|t($|[^p]))))

普通は380のようにするけどな。

384 名前:nobodyさん mailto:sage [2008/09/04(木) 10:49:47 ID:???]
^p^

385 名前:nobodyさん mailto:sage [2008/09/04(木) 10:50:59 ID:???]
^w^

386 名前:nobodyさん [2008/09/04(木) 19:48:29 ID:ZxHTo/La]
codezine.jp/article/detail/1573
こんな問題集を見つけたんだが
正規表現道場に近いな

387 名前:nobodyさん [2008/09/04(木) 21:53:09 ID:AVvRqwBM]
$が肯定先読みというのは目から鱗。

388 名前:nobodyさん [2008/09/17(水) 17:44:57 ID:TGrFERMS]
質問させてください。
OSはubuntu8.04で正規表現を勉強し始めの者です。

電話番号と郵便番号が混在しているテキストファイルから郵便番号だけ
抽出するという条件なんですが、

郵便番号はxxx-xxxx(xは0-9の数字)、電話番号はxx-xxxx-xxxx(xは0-9の数字)
で、grep -E [0-9]\{3\}-[0-9]\{4\} とやっても電話番号も全て抽出されてしまいます。
どこが間違っているのでしょうか。

389 名前:nobodyさん mailto:sage [2008/09/17(水) 17:54:16 ID:???]
その正規表現だと電話番号にもマッチしちゃうからね。

具体的には、

xx-xXXX-XXXX

の大文字Xであらわしたところ

まあ宿題なんだろうからもうすこし良く考えましょう。

390 名前:nobodyさん mailto:sage [2008/09/17(水) 19:24:47 ID:???]
>>389
grep -E ^[0-9]{3}-?[0-9]{4}$
でうまくいきました。ヒント有難うございます。



391 名前:nobodyさん mailto:sage [2008/09/22(月) 18:03:26 ID:???]
質問です。
下記のような配列の中から、
(2)〜(4)までのみを抽出したいと思っています。

 (1) testa@hoge
 (2) _testb@hage
 (3) _testc@noge
 (4) _testd@nage
 (5) _teste@n_ge

ルールとしては、
 ・頭に[_]が付いている事、
 ・@の後ろに[n_]が付いていない事
です。上記前提で下記のように書いたのですが、
これですと(2)しか抽出されませんでした。

 $test =~ /^_.*@[^(n_)]/

@の後ろの正規表現が悪いのだと思うんですが、
この場合どのように書けばいいんでしょうか。
ご教示お願いしますm(_ _)m

392 名前:nobodyさん mailto:sage [2008/09/22(月) 18:09:42 ID:???]
>>391
それじゃ文字クラスだよ。こういうときは否定先読みだろ。

393 名前:nobodyさん mailto:sage [2008/09/22(月) 18:13:12 ID:???]
/^_\w*\@\w+$/ and !/\@n_/

先頭_と@の間はどんな文字でもいいのか、@以降はどんな文字でもいいのかとか
詳しいルールはわからないが、素直に分けたほうがいいと思う

394 名前:nobodyさん mailto:sage [2008/09/22(月) 18:18:30 ID:???]
>>392-393
ありがとうございます!
とりあえず、>>392さんの方法で抽出できました。

$test =~ /^_.*@(?!n_)./

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

395 名前:nobodyさん [2008/09/25(木) 14:22:28 ID:bEreCYy4]
使用言語はPHP5です

html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたいと思い
以下の置き換えを行い成功したのですが、

$html = preg_replace('{<img (.*?)>}' ,'<img $1 />' ,$html);

元々imgタグ内にスペースとスラッシュが最後に入っているのもありますので、それ以外ということで

$html = preg_replace('{<img (.*?)^\/>}' ,'<img $1 />' ,$html);

このように記述してみましたが、これですと全部のimgタグに置き換えが効かなくなりました
どういう記述をすればよいのでしょうか?



396 名前:nobodyさん mailto:sage [2008/09/25(木) 14:30:11 ID:???]
/<img (.*?[^\/])>/

397 名前:nobodyさん [2008/09/25(木) 14:38:21 ID:bEreCYy4]
>>396
動きました
素早い回答ありがとうございました

398 名前:nobodyさん mailto:sage [2008/10/07(火) 01:09:40 ID:???]
対象が

<a href="test/index.html">あああ</a>
<a href="hogehoge1.com" target="_blank">いいい</a>

のような文字列から

test/index.html
hogehoge1.com

だけを取り出すにはどうすればよいのでしょうか?

使用言語はPHP5です。

preg_match("/<a href=\"(.*)\"\>.*/",$str,$m);

ではtarget="_blank"が残ってしまい期待通りの結果が得られません。
最短一致というのが原因かとおもい

preg_match("/<a href=\"(.*)\"{1}?\>.*/",$str,$m);

としましたが駄目でした。
アドバイスよろしくお願いいたします。

399 名前:nobodyさん mailto:sage [2008/10/07(火) 01:57:33 ID:???]
/<a\s.*?href=\"(.*?)\"/is

400 名前:nobodyさん mailto:sage [2008/10/07(火) 21:57:53 ID:???]
>>399
無事期待通りの結果が得られました!
ありがとございました!



401 名前:nobodyさん mailto:sage [2008/10/09(木) 19:29:23 ID:???]
PHP5で使います

$numには、

+数字
-数字
数字

というようなパターンの時のみマッチさせたいです
数字のところは 0〜999999999までの値が入ってきますが、0以外の時に頭に0がある場合0123とかは除外したいです
試行錯誤して下記のようにしてみましたが、思った結果が得られません。エラー出まくりでなみだ目です
どうかよろしくお願いします


preg_match('/^(([^+]*)*(++[^-][^+]*)*)*?[^0-9]*$/',$num)

402 名前:nobodyさん mailto:sage [2008/10/09(木) 19:32:07 ID:???]
[\+\-]?(?:0|[1-9]\d*)

403 名前:402 mailto:sage [2008/10/09(木) 19:33:52 ID:???]
不十分か。。

^[\+\-]?(?:0|[1-9]\d*)$


404 名前:nobodyさん mailto:sage [2008/10/10(金) 00:47:33 ID:???]
>>403
ありがとうございます
動作を確認したところ
0のみの場合と数字の部分が9桁以上でもマッチしてしまうので、

^([^0]|[\+\-]?)(?:0|[1-9]\d{1, 9}?)$

試行錯誤してこのようにしてみましたが、全くもってマッチしなくなってしまいました
どのように書けばよろしいのでしょうか?

405 名前:nobodyさん mailto:sage [2008/10/10(金) 00:58:41 ID:???]
^[\+\-]?(?:0|[1-9]\d{0,8})$

406 名前:nobodyさん mailto:sage [2008/10/10(金) 07:43:15 ID:???]
>>405
できました
ありがとうございました

407 名前:たまちゃん ◆ExGQrDul2E [2008/11/02(日) 16:02:00 ID:wDYsJgfV]
URLが、変数$urlにいくつ使われているか調べるために
preg_match_allを使いましたが、動きません。
どのようにしたらよいか教えてください。
<?php
$url = <<< URL
a
x.x
http://
google.jp/
URL;
preg_match_all ("|(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)|",$url,$out, PREG_SET_ORDER);
echo count($out);
?>

実行結果:
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'f' in /match.php on line 8
0


408 名前:nobodyさん mailto:sage [2008/11/02(日) 16:11:53 ID:???]
別の正規表現構文を探してきてコピペする

409 名前:nobodyさん mailto:sage [2008/11/02(日) 17:38:13 ID:???]
デリミタ|で始めたならm|にする必要があるっしょ
で、途中にORの意味で|使ってるから別のデリミタにしちゃいなよ

410 名前:たまちゃん ◆ExGQrDul2E [2008/11/02(日) 21:36:24 ID:0rYlog69]
>>409
回答ありがとうございます
\(・∀・)/

途中で
https?|ftp
で使っているのですが、
最初を
||
//
以外に、何を使えばよいのでしょうか?

それとも

\(エスケープ)させればよいのでしょうか?



411 名前:nobodyさん [2008/11/03(月) 20:39:21 ID:XFsZ1V0e]
文字クラス外部の?について。
URLの最短マッチさせる正規表現
(https?)
について、
この場合なら、
http
https
両方にマッチします。
(https)
これなら、
https
にしかマッチしません。
ここで、?の意味を調べたら、『(の意味を拡張。0回または1回の繰り返し最短マッチ』と書いてありました。なぜ
(https?)
これをすることによって、httpとhttpsをマッチさせられるのでしょうか?最短マッチなら、httでもいいのじゃないですか?

412 名前:nobodyさん mailto:sage [2008/11/03(月) 21:26:40 ID:???]
https? なら ?は直前のsに対して0回か1回かだからね^^






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<179KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef