1read 100read
2012年1月1期WebProg9: 正規表現道場 (865) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
10: === MediaWiki 管理者の集い 第3版 === (418)
11: Java VS PHP (590)
12: 【総合】 Webprog板質問雑談スレッド 1 (479)
13: 【PHP】 Smarty 【テンプレートエンジン】 第2章 (959)

正規表現道場


1 :07/01/11 〜 最終レス :12/01/07
【正規表現道場の掟】
・言語不問
・質問も大歓迎。使用言語を書くのを忘れずに。
正規表現と関係ない話・質問は他スレへどうぞ。

2 :
http://pc10.2ch.net/test/read.cgi/tech/1156413899/
終了

3 :
勝手に終了すんなデブ
ここはここでやればいい
再開あげ

4 :
>>2は道場破り?

5 :
一年ぶりの復活をしたなら過去スレくらい書こうぜ('A`)
過去スレ
正規表現道場@2ch
 http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
 http://pc5.2ch.net/test/read.cgi/php/1038146241/
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
 http://pc5.2ch.net/test/read.cgi/php/1069245758/
正規表現道場@2ch Part4
 http://pc8.2ch.net/test/read.cgi/php/1105930285/
過去スレのテンプレにあった参考サイトたち
Perlメモ
 http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
 http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
 http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
 http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門
 http://web.archive.org/web/20021219021503/http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座)
 http://www.sixnine.net/regexp/
ほとんどは↓のリンク集にまとまっています。
正規表現/文字コード最新リンク2005
 http://www2.famille.ne.jp/~akio1998/l_grep.html

6 :
>>5
ご苦労様です

7 :
対象文字列 //abca
正規表現 ^(/([a-z]*))*$ → マッチ
正規表現 ^(/(?:[a-z]*))*$ → マッチしない
後方参照を許す括弧かそうでないかで結果が違うのはなぜでしょうか?
処理系は PHP 5.2.0-8、OS は Debian GNU/Linux etch
使用した関数は preg_match() です。
具体的には
preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m);
var_dump($m);
とすると $m[0] が空文字列になります。
すなわちマッチしません。

8 :
>>7
preg_matchに与える正規表現は/で括る必要があるけど、原因はそれじゃない?
正規表現reをpreg_matchに与えるときは
preg_match("/re/", $baka);
とかやるんだけども。

9 :
>>8
いちおう '@^(/(?:[a-z]*))*$@' などとして区切り文字を
@ にするなど気をつけているのですが・・・
()と(?:)により挙動が違うというのが解せません・・・
もう少し実験してみます。ereg 系で試すとまた
結果が違ってくるかも知れないので。

10 :
これは…PCREのバグを踏んじゃった可能性が結構高そうな…
echo preg_match('{^(?:/(?:[a-z]*))*$}', "//abca");
=> 0
Perl互換正規表現と言うくらいなのでPerlとの比較をしてみても勿論このとおり
$ perl -e 'print scalar "//abca" =~ m{^(?:/(?:[a-z]*))*$};'
=> 1
後で念のためPCRE直接叩いてみよう

11 :
>>10
ふぅむ、バグの可能性もあるんですか〜
//abca じゃなくて /abca/abca とかならマッチするんですよね。
実はパスをディレクトリに分解しようとおもいまして、
その途中に // が入っているようなケースで挙動がおかしいので調べてました。
//abcde は / と /abcde に分解したかったんです。

12 :
ふう、PCRE付属のpcretestでバージョン別検証。
[PCRE version 6.6 06-Feb-2006]
re> /^(?:a(?:b*))*$/
data> aa
0: aa
[PCRE version 6.7 04-Jul-2006]
re> /^(?:a(?:b*))*$/
data> aa
No match
[PCRE version 7.0 18-Dec-2006]
re> /^(?:a(?:b*))*$/
data> aa
0: aa
ver6.7のみ上手くマッチしないと言う結果になった。
changelogの7.0をみてもそれっぽいのが見つけられないけれど、38辺りかなぁ…
ちなみにPHPで使ってるPCREのバージョンは、
phpinfoのpcreのPCRE Library Versionで確認できる

13 :
ちょっといいかな。
>>12 の結果に疑問はないのだけど、
>>7
> preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m);
は空文字列にマッチで正解じゃないの?
だって、対象文字列には // と行頭に二つスラッシュが並んでいるけど、
正規表現は ^/ と一個しかないよ?
後ろに $ が置かれちゃってるから、
//hogehoge というパターンには空以外マッチしようがないと思うんだけど
俺、何か勘違いしてる?

14 :
>>13
多分、中のアルファベットに対する量指定子を考慮に入れてないんでないかい?
^ # 文字列の最初
 (
  /(?:[a-z]*) # /の後に[a-z]が0文字以上
 )*       # の0回以上繰り返し
$ # 文字列(行)の最後
//abcaは、<スラッシュ、[a-z]が"0文字"、スラッシュ、[a-z]が4文字>となってマッチしなければならない。はず。
>>11
その目的だとpreg_matchじゃ駄目だと思う。
一個目のキャプチャが繰り返しを全て記録することを期待したんだと思うが、毎回上書きされてしまう。
パス文字列が妥当なものかをマッOで検証するためにpreg_matchを用いて、
実際の切り分けはexplode等を使ったほうがいいんじゃないかな。スレ違いになるが。
マッOで切り分けるとするならpreg_match_allを用いて
preg_match_all('{\G/[a-z]*}', "//abca", $m)
といった感じか

15 :
>>12
ビンゴのようです。
手元の二つのLinuxマシンで試してみました。
preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m);
Debian GNU/Linux etch
PHP 5.2.0-8 PCRE 6.7 04-Jul-2006
マッチしない。
Fedora Core 4
PHP 5.1.6 PCRE 6.3 15-Aug-2005
マッチする。

16 :
>>12
TurboLinux Server 8.0 (Viper) での挙動も調べてみました。
preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m);
preg_match('"^(/(?:[a-z]*))*$"', "/a/abca", &$m);
いずれもマッチします。
PHP 4.2.3 PCRE 3.4 22-Aug-2000 です。
やはり Debian GNU/Linux etch の PHP5 5.2.0-8 だけが
PCRE 6.7 04-Jul-2006 を使っていて挙動が変みたいなんで、
Debian GNU/Linux の BTS (バグ報告)に挙げようとおもうんですが、
>>12 の結果も引用させてもらって構いませんでしょうか?

17 :
>>14
ありがとう。指摘通り誤読していた。
拡張表記をみてわかったよ。
やっぱLarryは偉いな。
ところでかっこの内と外で繰り返し指定が
連続するパターンは組み合わせの爆発が
怖くて自分はできるなら使わないように
しているんだけど、みんなはそんなこと
気にしない?

18 :
>>17
DFAだからとりあえずえらいことにならないうちに停止するだろう、
とか自分では思い込んでるんですが、NFAなら延々とバックトラック
しながらはまり込むとかあるんですかね。

19 :
>>16
どうぞお使いください。
でも、phpのソースにpcreが同梱されてるようだけれど報告先ディストリでいいのかな…

20 :
>>19
ありがとうございます。
むしろ PHP のバージョンごとあげてもらえればと。
って、最新バージョンのソースに入ってるのか orz
ちょっと PHP のソース眺めながら思案してみます。

21 :
>>19
I've reported this issue to PHP bug report.
http://bugs.php.net/bug.php?id=40195
Complete report and examination results are in
http://geeklog.windy.cx/article.php/20070122224722545
I'm in my Linux box without Japanese environment :-p

22 :
Nuno Lopes さんからリプライがあり、修正対象となりました。
[22 Jan 9:43pm UTC] nlopess@php.net
I confirm this is a bug in pcre. so let's ask Andrei to
upgrade PCRE to version 7, maybe for PHP 5.2.2
(assign back to me if you want me to do it).

23 :
>>21-22
これは模範としたいバグ報告。乙です。

24 :
perl質問厨よろしくです。
@array = split(/(hoge(.))\2/, $line);
この2番目の括弧だけ@arrayに含めないことはできますか?
'----hoge11-----'

('----', 'hoge1', '-----')
という風に取り出したいのです。

25 :
すいません。別の方法で解決しました。

26 :
http://pc10.2ch.net/test/read.cgi/tech/1156413899/
終了

27 :
[9 Feb 7:58pm UTC] nlopess@php.net
bundled pcre upgrade to version 7.0.

28 :
PHPで正規表現
http://www.pahoo.org/e-soul/webtech/php05/

29 :
マルチで宣伝か?

30 :
質問よろしくお願いします
ABCと続く場合を除くABという文字列を指定したい場合は
どのように書いたらよいでしょうか・・・

31 :
正規表現ってどんなメリットあるの?
覚えなくても良いんでしょ?
よく、書く行数が減る⇒デバッグの時に楽って言うけど、
ロジック設計を完璧にするほうが大事じゃないかなーなどと思ってしまいます(ドシロウトですが)
そんなのとうに完璧って人がチャレンジすることなんですかねー

32 :
>>30
Rubyでは(おそらくPerlやPHPのpreg_*系でも)
AB(?!C)

33 :
>>31
文字列のパターンを記述するために特化した言語なので、
覚えれば非常に楽ができる。
ロジックで100行とか費やすようなパターンを、
正規表現では1行で表すことも可能(かもしれない)。
覚えなくてもいいが、覚えた方がはるかに楽ができるよ。

34 :
>>31
ロジック組めないやつが楽をするためだよ
文字列から数字の部分だけ抜き出して表示とか正規表現なら簡単に出来るが
使わないでやれとかいわれたら時間がかかる。おまけにバグる。

35 :
数字だけ抜き出すのが何かものすごい魔法のような技術のように思っているらしいw

36 :
あるいは「おれってすげえ気の利いたこと言った?」とか思ってるのかなwww

37 :
【心の】旦那には絶対言えない過去4【奥に】既婚女性板
http://human6.2ch.net/test/read.cgi/ms/1168957905/
7 名前:可愛い奥様[] 投稿日:2007/01/18(木) 03:03:54 ID:iE8GVdnP
援交10回、中絶2回、デリヘル、ソープ1年、整形2か所
12 名前:可愛い奥様[] 投稿日:2007/01/19(金) 22:43:01 ID:s7dkuHKN0
高校生の頃から喫煙。経験あり。
旦那は私にとって7人目の彼氏。(旦那には3人目と嘘ついた)
酒に酔った勢いでワンナイトラブの経験あり。
25 名前:可愛い奥様[] 投稿日:2007/01/26(金) 04:08:25 ID:IfNo5kNWO
中絶4回、イメクラ一年、二重整形、大学中退、性病2回、同棲3回。
45 名前:可愛い奥様[sage] 投稿日:2007/02/04(日) 14:24:40 ID:PBhJa6V+0
自分の預金が旦那の年収の7倍くらいあること。
学生のとき、ちょっとした事業起こして大成功w そのことも話してない。
47 名前:可愛い奥様[] 投稿日:2007/02/04(日) 17:16:59 ID:CaAW9Ko50
うーん。堕胎。母子手帳に記載しないといけないから…そこは糊で貼付けた。
義母にはバレているだろう。でも回数が…1回多いとは…永遠の秘密。
92 名前:可愛い奥様[] 投稿日:2007/02/09(金) 23:46:04 ID:QRXcETQYO
セクキャバでバイト経験あり。援交しまくり時代もあり。ヤッた数は100人くらい。
私バツイチで今の旦那には元夫の浮気が原因で離婚したの。とか言ったけどほんとは逆。
好きな人できて夫捨ててのりかえた。浮気しまくりだった。
すごくいい夫だったのにすごく最低な事したって思う。
106 名前:可愛い奥様[] 投稿日:2007/02/18(日) 09:56:13 ID:wIf/65Md0
半年前、万引きして捕まった事。嘘泣きして逃がしてもらった(^^v

38 :
/tatakanamk/
と言う文字列があって/から/までの検出をするにはどう書けばよいでしょうか?
/と/も含めて12文字を検出したいのです。
超初歩的ですがよろしくお願いします。

39 :
>>1
>使用言語を書くのを忘れずに。
くらいは守ってくれ。処理系によって正規表現は千差万別だからな。

40 :
エスパー見習いの漏れが使用言語は Perl と推測。
バックスラッシュを前置してエスケープする。
/\/tatakanamk\//

41 :
>>32
ありがとうございました!

42 :
>>40
m{/tatakanamk/} みたいにやたらとエスケープ連発しないですむ方法を教えろよ… 

43 :
エスケープを知らないのも問題だから両方教えるべきだとおも

44 :
だってもし他の言語だったとしても応用が一番効きそうじゃん。
と言い訳。

45 :
>>43
そりゃ確かにそうだね。
必要のないところまでエスケープしているような正規表現見てると
腹が立ってくるんだよw
>>44
わかった、わかったw

46 :
保守

47 :
<?
$str = "/get/data/&country=2&url=http://www.example.com/?url=http://www.example.com";
このデータの中ではじめの url= 以降の文字列を取得するにはどうすればいいのでしょうか?ちなみにurl=以降の文字列にも再度url=が含まれていますが、これを無視してすべて取得したいです。
どうぞよろしくお願いします。

48 :
>>47
url=http://www.example.com/?url=http://www.example.com
がとれりゃあいいのか?
url=.*$
で何か不都合ある?

49 :
php使ってます。
文字列中の?を抽出するにはどう記述したらいいのでしょう?
¥?
じゃだめなことはわかりましたorz

50 :
バックスラッシュを前に置く。

51 :
ばっちですた!

52 :
教えてください。
$in=ユーザーからの入力
$str='abc%ghi';
$str=preg_replace('/(\w+)%(\w+)/',"\1$in\2",$str);
ユーザーからの入力を'def'にしておくと、abcdefghiになります。
ですがユーザーからの入力が'123'の場合、ghiになります。
たぶん、置換後の文字列が「\1123\2」と、繋がって解釈されているからだと思います。
{\1}のように囲むとか、なにか繋がらないように解釈してもらう方法はないですか?
二段階に分けて置換するとかすれば回避できなくはないですがスマートではなさそうなので。

53 :
すいませんphp4です。

54 :
こうしたらこうなるって結果を一行にまとめて

55 :
>>52
"\\1" . $in . "\\2"
"\\1{$in}\\2"
というか普通に\\1と\1を間違えてるだけじゃない?

56 :
>55
>普通に\\1と\1を
すいません間違いでした。(ここに貼ったあと直しましたが動作変わらず。)
そのうえ↓を書いてて解決しました。手間取らせてすいません。
$in='123';
$str=preg_replace('/(abc)%(def)/',"\\1$in\\2",$str); //これが
$str=preg_replace('/(abc)%(def)/',"\\1123\\2",$str); //こうなってしまうので
$str=preg_replace('/(abc)%(def)/',"def",$str); //\\1123はないので消えて\\2だけ置換され
print $str; //defが出力される
と思うので、{$in}でくくっても結果は同じでした。
一番いいのは\\1側を{\\1}くくる方法だと思うのですが。
→phpだと\\1は\$1でもいいので、"\${1}$in\$2"で解決しますた。ほんとすいません。

57 :
$str = "foo@=barfoo@=bar";
$str = preg_replace('/foo.*(=)bar/', "a\\1b", $str);
を実行した場合の結果をa=ba=bにしたいのですが、
実際はa=bになってしまいます。
どこが間違っているのでしょうか?

58 :
>>57
.* が何にマッチしているのか確かめてみ。

59 :
>>58
.*を bar と続く文字列以外の任意の文字列に変えればいいというのはわかるのですが、
$str = preg_replace('/foo[^(bar)]*(=)bar/', "a\\2b", $str);
としてもうまくいきません。
エロイ人よろしくお願いします。

60 :
「ある文字列を含まない文字列」の正規表現はめんどいので最短マッチ .*? で。

61 :
>>60
おお!それでできました。
ありがとうございます。

62 :
>>59
foo[^(bar)]*(=)bar
ブラケットの中とかどこでこんな書き方覚えてくるんだよ…
今回の場合、barまで見ないでも = までみりゃあいいんじゃないの?
不用意に最短マッチ使ってるとパフォーマンスで泣くよ?
foo[^=]*=bar を a=b に置換でいいじゃん。
=をキャプチャするのも意図がわからん。

63 :
<html>
<head>
<title>テスト</title>
</head>
<body>
<!-- ここから -->
あああああああああああ<br />
あああああああああああ<br />
あああああああああああ<br />
あああああああああああ<br />
あああああああああああ
<!-- ここまで -->
</body>
</html>
このようなhtmlをPHP5のfile_get_contentsで読み込んで
<!-- ここから -->〜<!-- ここまで -->を取得したいのですが
どうすれば良いですか?
"/<!-- ここから -->(.*)<!-- ここまで -->/"
で読めませんでした

64 :
>>62
> 不用意に最短マッチ使ってるとパフォーマンスで泣くよ?
kwsk

65 :
$text = file_get_contents(なんちゃらかんちゃら);
mb_ereg("<!-- ここから -->(.*)<!-- ここまで -->", $text, $data);
echo $data[1];
改行に邪魔されてるんだろう

66 :
>>65
その記述だとパターンの部分でエラーがでない?

67 :
始めまして。
C#で、正規表現でyyyy/mm/dd書式をどう表現するのでしょうか?
ちなみに、.NETの正規表現はPerl互換だそうです。

68 :
>>67
Datteクラスかなんかに文字列食わせて、例外飛ぶかどうかで
判定したら?
正規表現でやると 9999年13月35日をうけつけてもいいってのなら
  \d{4}/\d{2}/\d{2}
かな。
月と日は頑張ればなんとかできるけどめんどくさいからやらない。

69 :
>>68
ありがとうございます。
実は、正規表現Validatorを使っているのです。

70 :
>>68
ああ、そういうことなのね。
一応注意しておくけど、C#の文字列のエスケープも\を使うので
プログラムに書くときは
  "\\d{4}..."
のように\を重ねるか、
  @"\d{4}.."
のような\が特別扱いされない形式にしてね。

71 :
php5です。ファイルのフルパスをディレクトリ,ファイル名,拡張子に分割してその配列を返したくてこう書きました。
$pattern1 = '`^(.*)(?:[/\\\](.*)){1}$`';
preg_match($pattern1, $fullpath, $match1);
$pos = strpos($match1[2], '.');
if($pos === false){
return array($match1[1], $match1[2]);
}else{
$pattern2='`^(.*?)\.(.*)$`';
preg_match($pattern2, $match1[2], $match2);
return array($match1[1], $match2[1], $match2[2]);
}
必ず拡張子があるなら一度のpreg_matchでキャプチャ出来たのですが
拡張子無しファイル混じりだった場合の正規表現がうまく思いつかずに二段階(三段階?)になってしまいました
でもpreg_matchやってその中で'.'探して、あったらさらにpreg_matchというのはまわりくどいように思います
この処理を一度にこなす正規表現の考え方のヒントをください

72 :
ああ半角空白の連続ダメなんだっけ インデント消えちゃた

73 :
>>71
http://jp.php.net/manual/ja/function.dirname.php
及び関連項目を参照。

74 :
あ、ごめん。正規表現スレだったね。無視して。

75 :
で、考えてみたんだけど、
$path = '/abc/def.g/eee.txt';
preg_match('/(.*?)¥/([^¥/]*)¥.([^¥/.]*$)/', $path, $match);
print_r($match);
こんな感じでどう?

76 :
これじゃ拡張子のない場合に対応できないか。
/(.*?)¥/([^¥/]*?)(¥.[^¥/.]*)?$/
でどうかな。スレを汚してしまってすまん。

77 :
PHPなら、dirnameとbasenameつかえば正規表現なんか使う必要一切ないだろ

78 :
>>77
>>73-74

79 :
正規表現無しだとこんな感じでした
$p = pathinfo($fullpath);
$temp = explode('.',$p['basename'],2);
$p['name'] = $temp[0];
if(isset($temp[1])){
 $p['ext'] = $temp[1];
}
>>76を参考にして正規表現で書けました
$pattern = '`^(.*)[/\\\]([^.]*?)(?:\.(.*))?$`';
preg_match($pattern, $fullpath, $match);
ありがとうございました

80 :
phpで携帯電話の絵文字を取り除くようpreg_replaceを使っているのですが、
絵文字が複数含まれた文字列?などでうまく取り除けません。
こんな感じにしているのですが原因やおかしな点などご教示ください。お願いします。
$str = '絵文字が含まれる文字列';
$emojiSjisChars = '(?:[\x00-\x7F\xA1-\xDF]|(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]))';
#DoCoMoの場合
$str = preg_replace('/\G(' .$emojiSjisChars. '*?)(?:\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x50-\x52\x55-\x57\x5B-\x5E\x72-\x7E\x80-\xB0])|(?:\xF9[\xB1-\xFC])/', '$1', $str);
#AUの場合
$str = preg_replace('/\G(' .$emojiSjisChars. '*?)(?:[\xf3\xf6\xf7][\x40-\xfc]|\xf4[\x40-\x8d])/', '$1', $str);
#Softbankの場合
$str = preg_replace('/\G(' .$emojiSjisChars. '*?)\x1B\x24[E-G].*?\x0F/', '$1', $str);

81 :
すいません。↑の$emojiSjisCharsは$sjisCharsの命名間違えです。

82 :
ちゃんと読んでないけど
(?:絵文字のコード) な部分を (?:絵文字のコード)+ にするだけではないの?

83 :
>>82
レスありがとうございます。
下のように+を入れましたがダメでした。
色々考えているとどんどん分からなくなってきました...
おかしな点があれば引き続きご教示お願いします。
#DoCoMoの場合 ※見にくいので表示上改行します。
$str = preg_replace(
  '/\G(' .$emojiSjisChars.'*?)
    (?:\xF8[\x9F-\xFC]|\xF9[\x40-\x49\x50-\x52\x55-\x57\x5B-\x5E\x72-\x7E\x80-\xB0])+|
    (?:\xF9[\xB1-\xFC])+/', '$1', $str);

84 :
オライリーの詳細正規表現の本って
通常のと第2版ってのがあるけどどっちがいいのよ?

85 :
>>84
通常のって初版のことかい?
そりゃあ新しい方が。
具体的にどう変わったか覚えてないのでオライリーのサイトを見たけど、
Perlの対象が5.8にあがっているのと、.JAVAとNETの説明が増えたとからしい。

86 :
php4.3.11です
---------------------------------
$str = <<< DOC_END
あああああ
いいいいい
<html_start>
ううううう
えええええ
<html_end>
おおおおお
DOC_END;
$pattern = "/<html_start>(.*)<html_end>/";
$replacement = 'aaaabbbb';
$res = preg_replace($pattern, $replacement, $str);
print_r($res);
---------------------------------
と出力してみましたが何も表示されませんでした。
ホントは「あああああいいいいいaaaabbbbおおおおお」と出て欲しかったのですが…。
最終的には<html_start><html_end>で囲まれた範囲に
PHPのhtmlspecialchars()やnl2br()関数を適用して出力したいです。

87 :
>>86
> $pattern = "/<html_start>(.*)<html_end>/";
「 ^ や $ があるってことは正規表現って行単位?複数行の場合は?」とか思いながら
$pattern = "/<html_start>(.*)<html_end>/s";
にして試す。で、「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。
うちのPHP5さんでは元のコードでも「何も表示されない」にはならなかったな。
 
ブラウザ出力: あああああいいいいい うううううえええええ おおおおお
ソース: print_r($str) な感じ

88 :
>>87
s修飾子で動作しました!ありがとうございます。
>「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。
関数のページばかりみて
http://jp.php.net/manual/ja/ref.pcre.php
http://jp.php.net/manual/ja/reference.pcre.pattern.modifiers.php
のページの存在に気がつきませんでした…。
あとは関数を適用する方法を探してみますっ!

89 :
案外この手の質問したい人もいるんだね

90 :
後方置換する時に関数かましたくマニュアル眺めてたら「e修飾子」をみつけたのですが
>>87の「S修飾子」と同時に使おうと
$pattern = "/(.*?)<html_start>(.*)<html_end>(.*?)/se";
$replacement = "'\\2''\\1''\\3'";
こんなコードを書いてみた所
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
Failed evaluating code:
といった感じで怒られます
修飾子2個は同時に使えないのでしょうか…?

91 :
>>86ですが
自分で見返してたらこれは既に正規表現でなくPHPの質問な気がしてきましたので該当スレに
移動しますです。
スレ違、申し訳ありませんでした。

92 :
IPを正規表現でチェックしたいのですが
210.000.111.1〜210.000.111.255
215.100.000.1〜215.100.000.255
の2つに当てはまる場合、TRUE(int1)をかえすにはどうすればいいでしょうか?
以下のようにやってみたのですが他のIPでもint(1)がかえってきます。
preg_match('/^210\.000\.111\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ || ^215\.100\.000\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/', $_SERVER['REMOTE_ADDR'])

93 :
>>92
正規表現で foo || bar みたいなのはないっしょ。
/^(210...(中略)...|215...(中略)...)$/ みたいな。
アドレスの範囲のチェックをするなら正規表現使わない方が良いと思うけどね。

94 :
すみませんが、価格にマッチする正規表現を教えていただけないでしょうか。

\1,000,000,000
\12,345
\1,230
\200
\10
数字3つごとに、カンマが入り、先頭に円マーク(\)のくるものです。
判らないためググッたのですが、正規表現に関する本ばかり検索結果として出てきまして…。

95 :
上の>>94ですが、使用言語はPHPです。

96 :
それは、「\12,1232,32」みたいなのははじきたいの?

97 :
「正規表現 カンマ」とかでぐぐってみると・・・

98 :
>>98
穴だらけだけどこんなんのこと?
$hoge = "\1,000";
if(ereg(".*[0-9,\\]",$hoge)):
echo "ok";
else:
echo "ng";
endif;

99 :
>>98
つ[ http://www.google.co.jp/search?hl=ja&q=%E9%87%91%E9%A1%8D%E3%80%80%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&lr= ]

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
10: === MediaWiki 管理者の集い 第3版 === (418)
11: Java VS PHP (590)
12: 【総合】 Webprog板質問雑談スレッド 1 (479)
13: 【PHP】 Smarty 【テンプレートエンジン】 第2章 (959)