正規表現道場 at PHP
[2ch|▼Menu]
1:nobodyさん
07/01/11 02:40:43 uW7xEbZY
【正規表現道場の掟】

・言語不問

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

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

2:nobodyさん
07/01/11 03:10:51
スレリンク(tech板)

終了

3:1
07/01/15 00:57:08 /DToo9Jn
勝手に終了すんなデブ
ここはここでやればいい
再開あげ

4:nobodyさん
07/01/15 20:06:50
>>2は道場破り?

5:nobodyさん
07/01/15 22:01:26
一年ぶりの復活をしたなら過去スレくらい書こうぜ('A`)

過去スレ
正規表現道場@2ch
 スレリンク(php板)
正規表現道場@2ch Part2
 スレリンク(php板)
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
 スレリンク(php板)
正規表現道場@2ch Part4
 スレリンク(php板)


過去スレのテンプレにあった参考サイトたち
Perlメモ
 URLリンク(www.din.or.jp)
正規表現メモ
 URLリンク(www.kt.rim.or.jp)
Regex::Diagram.pm
 URLリンク(www.cc.rim.or.jp)
正規表現
 URLリンク(www.cc.rim.or.jp)
UNIX正規表現入門
 URLリンク(web.archive.org)
Regular Expression(Riue ちゃんの正規表現講座)
 URLリンク(www.sixnine.net)

ほとんどは↓のリンク集にまとまっています。
正規表現/文字コード最新リンク2005
 URLリンク(www2.famille.ne.jp)

6:nobodyさん
07/01/16 02:57:15
>>5
ご苦労様です

7:()と(?:)の違い
07/01/21 14:23:29 HARdTCVv
対象文字列 //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:nobodyさん
07/01/21 15:16:09
>>7
preg_matchに与える正規表現は/で括る必要があるけど、原因はそれじゃない?
正規表現reをpreg_matchに与えるときは
preg_match("/re/", $baka);
とかやるんだけども。

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

10:nobodyさん
07/01/21 20:27:33
これは…PCREのバグを踏んじゃった可能性が結構高そうな…
echo preg_match('{^(?:/(?:[a-z]*))*$}', "//abca");
=> 0

Perl互換正規表現と言うくらいなのでPerlとの比較をしてみても勿論このとおり
$ perl -e 'print scalar "//abca" =~ m{^(?:/(?:[a-z]*))*$};'
=> 1

後で念のためPCRE直接叩いてみよう

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

12:10
07/01/21 23:05:47
ふう、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:nobodyさん
07/01/22 00:49:01
ちょっといいかな。
>>12 の結果に疑問はないのだけど、

>>7
> preg_match('"^(/(?:[a-z]*))*$"', "//abca", &$m);
は空文字列にマッチで正解じゃないの?
だって、対象文字列には // と行頭に二つスラッシュが並んでいるけど、
正規表現は ^/ と一個しかないよ?

後ろに $ が置かれちゃってるから、
//hogehoge というパターンには空以外マッチしようがないと思うんだけど
俺、何か勘違いしてる?


14:nobodyさん
07/01/22 01:56:13
>>13
多分、中のアルファベットに対する量指定子を考慮に入れてないんでないかい?
^ # 文字列の最初
 (
  /(?:[a-z]*) # /の後に[a-z]が0文字以上
 )*       # の0回以上繰り返し
$ # 文字列(行)の最後

//abcaは、<スラッシュ、[a-z]が"0文字"、スラッシュ、[a-z]が4文字>となってマッチしなければならない。はず。

>>11
その目的だとpreg_matchじゃ駄目だと思う。
一個目のキャプチャが繰り返しを全て記録することを期待したんだと思うが、毎回上書きされてしまう。
パス文字列が妥当なものかをマッチングで検証するためにpreg_matchを用いて、
実際の切り分けはexplode等を使ったほうがいいんじゃないかな。スレ違いになるが。
マッチングで切り分けるとするならpreg_match_allを用いて
preg_match_all('{\G/[a-z]*}', "//abca", $m)
といった感じか

15:()と(?:)の違い
07/01/22 04:08:40
>>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:()と(?:)の違い
07/01/22 07:00:19
>>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:13
07/01/22 11:21:28
>>14
ありがとう。指摘通り誤読していた。
拡張表記をみてわかったよ。

やっぱLarryは偉いな。

ところでかっこの内と外で繰り返し指定が
連続するパターンは組み合わせの爆発が
怖くて自分はできるなら使わないように
しているんだけど、みんなはそんなこと
気にしない?


18:()と(?:)の違い
07/01/22 12:31:13
>>17
DFAだからとりあえずえらいことにならないうちに停止するだろう、
とか自分では思い込んでるんですが、NFAなら延々とバックトラック
しながらはまり込むとかあるんですかね。

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

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

21:20
07/01/23 00:05:58
>>19
I've reported this issue to PHP bug report.
URLリンク(bugs.php.net)
Complete report and examination results are in
URLリンク(geeklog.windy.cx)
I'm in my Linux box without Japanese environment :-p

22:20
07/01/23 07:47:35
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:nobodyさん
07/01/23 17:36:48
>>21-22
これは模範としたいバグ報告。乙です。

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

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


25:nobodyさん
07/01/23 22:31:38
すいません。別の方法で解決しました。

26:nobodyさん
07/02/01 17:35:44
スレリンク(tech板)

終了

27:20
07/02/14 08:22:19
[9 Feb 7:58pm UTC] nlopess@php.net
bundled pcre upgrade to version 7.0.

28:nobodyさん
07/02/17 11:34:20
PHPで正規表現
URLリンク(www.pahoo.org)


29:nobodyさん
07/02/18 02:46:46
マルチで宣伝か?


30:nobodyさん
07/02/20 02:12:09
質問よろしくお願いします

ABCと続く場合を除くABという文字列を指定したい場合は
どのように書いたらよいでしょうか・・・

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

32:nobodyさん
07/02/20 02:23:50
>>30
Rubyでは(おそらくPerlやPHPのpreg_*系でも)
AB(?!C)


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

覚えなくてもいいが、覚えた方がはるかに楽ができるよ。

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


35:nobodyさん
07/02/20 08:24:42
数字だけ抜き出すのが何かものすごい魔法のような技術のように思っているらしいw

36:nobodyさん
07/02/20 08:27:41
あるいは「おれってすげえ気の利いたこと言った?」とか思ってるのかなwww

37:nobodyさん
07/02/20 08:35:59
【心の】旦那には絶対言えない過去4【奥に】既婚女性板
スレリンク(ms板)

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:nobodyさん
07/02/20 19:16:13 W7lgDSO2
/tatakanamk/
と言う文字列があって/から/までの検出をするにはどう書けばよいでしょうか?
/と/も含めて12文字を検出したいのです。
超初歩的ですがよろしくお願いします。

39:nobodyさん
07/02/20 19:38:28
>>1
>使用言語を書くのを忘れずに。

くらいは守ってくれ。処理系によって正規表現は千差万別だからな。

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

41:nobodyさん
07/02/20 22:52:27
>>32
ありがとうございました!

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


43:nobodyさん
07/02/21 03:35:33
エスケープを知らないのも問題だから両方教えるべきだとおも

44:40
07/02/21 10:00:30
だってもし他の言語だったとしても応用が一番効きそうじゃん。

と言い訳。

45:42
07/02/22 01:40:37
>>43
そりゃ確かにそうだね。
必要のないところまでエスケープしているような正規表現見てると
腹が立ってくるんだよw

>>44
わかった、わかったw


46:nobodyさん
07/03/02 01:04:13
保守

47:nobodyさん
07/03/10 16:03:45 VXyj5Dh3
<?
$str = "/get/data/&country=2&url=URLリンク(www.example.com)

このデータの中ではじめの url= 以降の文字列を取得するにはどうすればいいのでしょうか?ちなみにurl=以降の文字列にも再度url=が含まれていますが、これを無視してすべて取得したいです。

どうぞよろしくお願いします。

48:nobodyさん
07/03/11 04:44:19
>>47

url=URLリンク(www.example.com)
がとれりゃあいいのか?

url=.*$

で何か不都合ある?


49:nobodyさん
07/03/12 12:20:51 DmSqMrCU
php使ってます。
文字列中の?を抽出するにはどう記述したらいいのでしょう?

¥?

じゃだめなことはわかりましたorz

50:nobodyさん
07/03/12 12:48:47
バックスラッシュを前に置く。

51:nobodyさん
07/03/12 14:27:04 DmSqMrCU
ばっちですた!

52:nobodyさん
07/03/18 21:25:07 7HFdTRo7
教えてください。

$in=ユーザーからの入力
$str='abc%ghi';
$str=preg_replace('/(\w+)%(\w+)/',"\1$in\2",$str);

ユーザーからの入力を'def'にしておくと、abcdefghiになります。
ですがユーザーからの入力が'123'の場合、ghiになります。
たぶん、置換後の文字列が「\1123\2」と、繋がって解釈されているからだと思います。
{\1}のように囲むとか、なにか繋がらないように解釈してもらう方法はないですか?

二段階に分けて置換するとかすれば回避できなくはないですがスマートではなさそうなので。

53:52
07/03/18 21:25:46
すいませんphp4です。

54:nobodyさん
07/03/18 22:00:48
こうしたらこうなるって結果を一行にまとめて

55:nobodyさん
07/03/19 08:43:07
>>52
"\\1" . $in . "\\2"
"\\1{$in}\\2"

というか普通に\\1と\1を間違えてるだけじゃない?

56:52
07/03/20 00:34:39
>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:nobodyさん
07/03/23 00:39:31 P+rVOV8A
$str = "foo@=barfoo@=bar";
$str = preg_replace('/foo.*(=)bar/', "a\\1b", $str);
を実行した場合の結果をa=ba=bにしたいのですが、
実際はa=bになってしまいます。
どこが間違っているのでしょうか?

58:nobodyさん
07/03/23 02:15:09
>>57

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


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

60:nobodyさん
07/03/23 10:45:01
「ある文字列を含まない文字列」の正規表現はめんどいので最短マッチ .*? で。

61:57
07/03/23 16:57:03
>>60
おお!それでできました。
ありがとうございます。

62:nobodyさん
07/03/24 01:11:05
>>59

foo[^(bar)]*(=)bar

ブラケットの中とかどこでこんな書き方覚えてくるんだよ…
今回の場合、barまで見ないでも = までみりゃあいいんじゃないの?
不用意に最短マッチ使ってるとパフォーマンスで泣くよ?

foo[^=]*=bar を a=b に置換でいいじゃん。
=をキャプチャするのも意図がわからん。


63:nobodyさん
07/03/24 12:15:47 yU007f6l
<html>
<head>
<title>テスト</title>
</head>
<body>
<!-- ここから -->
あああああああああああ<br />
あああああああああああ<br />
あああああああああああ<br />
あああああああああああ<br />
あああああああああああ
<!-- ここまで -->
</body>
</html>

このようなhtmlをPHP5のfile_get_contentsで読み込んで
<!-- ここから -->〜<!-- ここまで -->を取得したいのですが
どうすれば良いですか?

"/<!-- ここから -->(.*)<!-- ここまで -->/"
で読めませんでした

64:nobodyさん
07/03/24 13:41:28
>>62
> 不用意に最短マッチ使ってるとパフォーマンスで泣くよ?

kwsk

65:nobodyさん
07/03/24 16:11:22
$text = file_get_contents(なんちゃらかんちゃら);
mb_ereg("<!-- ここから -->(.*)<!-- ここまで -->", $text, $data);
echo $data[1];

改行に邪魔されてるんだろう

66:nobodyさん
07/03/25 02:07:05
>>65
その記述だとパターンの部分でエラーがでない?

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

68:nobodyさん
07/04/07 04:03:00
>>67
Datteクラスかなんかに文字列食わせて、例外飛ぶかどうかで
判定したら?

正規表現でやると 9999年13月35日をうけつけてもいいってのなら
  \d{4}/\d{2}/\d{2}
かな。
月と日は頑張ればなんとかできるけどめんどくさいからやらない。



69:nobodyさん
07/04/08 02:12:40 EVMLEL7f
>>68
ありがとうございます。
実は、正規表現Validatorを使っているのです。

70:nobodyさん
07/04/08 16:37:48
>>68
ああ、そういうことなのね。

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


71:nobodyさん
07/04/15 02:12:22 v7Ys668x
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:nobodyさん
07/04/15 02:14:51
ああ半角空白の連続ダメなんだっけ インデント消えちゃた

73:nobodyさん
07/04/15 03:03:32
>>71
URLリンク(jp.php.net)
及び関連項目を参照。

74:73
07/04/15 03:04:35
あ、ごめん。正規表現スレだったね。無視して。

75:73
07/04/15 03:10:35
で、考えてみたんだけど、

$path = '/abc/def.g/eee.txt';
preg_match('/(.*?)¥/([^¥/]*)¥.([^¥/.]*$)/', $path, $match);
print_r($match);

こんな感じでどう?


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

77:nobodyさん
07/04/15 09:05:07
PHPなら、dirnameとbasenameつかえば正規表現なんか使う必要一切ないだろ

78:nobodyさん
07/04/15 11:13:03
>>77
>>73-74

79:71
07/04/15 11:28:41
正規表現無しだとこんな感じでした

$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:nobodyさん
07/05/03 19:11:49 meD6A7ah
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:80
07/05/03 19:17:55 meD6A7ah
すいません。↑の$emojiSjisCharsは$sjisCharsの命名間違えです。

82:nobodyさん
07/05/03 19:26:15
ちゃんと読んでないけど
(?:絵文字のコード) な部分を (?:絵文字のコード)+ にするだけではないの?

83:80
07/05/03 20:24:41 meD6A7ah
>>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:nobodyさん
07/05/04 00:29:52
オライリーの詳細正規表現の本って
通常のと第2版ってのがあるけどどっちがいいのよ?

85:nobodyさん
07/05/04 03:16:56
>>84
通常のって初版のことかい?
そりゃあ新しい方が。

具体的にどう変わったか覚えてないのでオライリーのサイトを見たけど、
Perlの対象が5.8にあがっているのと、.JAVAとNETの説明が増えたとからしい。


86:nobodyさん
07/05/10 19:57:43
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:nobodyさん
07/05/10 20:35:51
>>86
> $pattern = "/<html_start>(.*)<html_end>/";

「 ^ や $ があるってことは正規表現って行単位?複数行の場合は?」とか思いながら

$pattern = "/<html_start>(.*)<html_end>/s";

にして試す。で、「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。

うちのPHP5さんでは元のコードでも「何も表示されない」にはならなかったな。
 
ブラウザ出力: あああああいいいいい うううううえええええ おおおおお
ソース: print_r($str) な感じ

88:nobodyさん
07/05/10 20:51:04
>>87
s修飾子で動作しました!ありがとうございます。

>「s って何だよ、こんにゃろ」と思いながらマニュアルの「パターン修飾子」のとこを読む。
関数のページばかりみて
URLリンク(jp.php.net)
URLリンク(jp.php.net)
のページの存在に気がつきませんでした…。

あとは関数を適用する方法を探してみますっ!

89:nobodyさん
07/05/10 21:18:19
案外この手の質問したい人もいるんだね

90:86
07/05/14 15:45:03
後方置換する時に関数かましたくマニュアル眺めてたら「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
07/05/14 17:55:10
>>86ですが
自分で見返してたらこれは既に正規表現でなくPHPの質問な気がしてきましたので該当スレに
移動しますです。
スレ違、申し訳ありませんでした。

92:nobodyさん
07/05/17 13:08:20
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:nobodyさん
07/05/17 13:53:20
>>92
正規表現で foo || bar みたいなのはないっしょ。
/^(210...(中略)...|215...(中略)...)$/ みたいな。

アドレスの範囲のチェックをするなら正規表現使わない方が良いと思うけどね。

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


\1,000,000,000
\12,345
\1,230
\200
\10


数字3つごとに、カンマが入り、先頭に円マーク(\)のくるものです。

判らないためググッたのですが、正規表現に関する本ばかり検索結果として出てきまして…。

95:おながいします
07/06/06 13:29:35 iKhV2zih
上の>>94ですが、使用言語はPHPです。

96:nobodyさん
07/06/06 13:41:59
それは、「\12,1232,32」みたいなのははじきたいの?

97:nobodyさん
07/06/06 13:49:54
「正規表現 カンマ」とかでぐぐってみると・・・

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

99:nobodyさん
07/06/06 15:08:26
>>98
つ[ URLリンク(www.google.co.jp) ]

100:94
07/06/06 17:22:28
>>96 >>97 >>98 >>99
皆様、ありがとう御座いました。
「価格 正規表現」、「値段 正規表現」でググってました(汗)

101:nobodyさん
07/06/30 13:42:20
(?:pattern),および(?>=pattern)が認識されないエディタにおいて、
$obj->method();の「method」のみにマッチさせるにはどうすればいいでしょうか。
ちなみに(?=pattern)は使えます。


102:nobodyさん
07/07/09 23:51:58 jN4+J6ks
VB.NETで正規表現を書いています。
条件としては、「A0123」のように、先頭がアルファベットのAでその他が数字4桁という正規表現と、
「01234」のような数字5桁という二種類のどちらかにマッチする正規表現を作っています。
正規表現は苦手で困っています。
どなたかご教授下さい。
よろしくお願いします。

103:nobodyさん
07/07/10 01:52:51
>>012
[A\d]\d{4}

とか。
あと「教示」な。


104:nobodyさん
07/07/13 17:31:53 lsKPRG81
phpで文中の郵便番号の部分を置き換える正規表現を書いているのですが
電話番号(携帯など)も引っかかってしまいます
どのように直せばいいのでしょうか?

mb_ereg_replace('([0-90-9]{3}[\-−ー‐]+[0-90-9]{4}|[0-90-9]{7})',"郵便番号",$data)

105:nobodyさん
07/07/14 04:11:15
mb_ereg って戻り読み使えなかったんだっけ?

(\D)\d{3}-\d{4}(\d{3})?(?!\D) を \1郵便番号 で置換。でどう?
面倒くさいので全角数字とかハイフンの類は自分で調整して。


106:nobodyさん
07/07/20 05:15:36 wp5plGkY
$textにHTMLタグを含んだ文字列が入っていて、
<>外部の< > " をそれぞれ < > " に置換したい(<>内部はそのまま)
のです。以下のように、まず全ての<>"を置換し、HTMLタグの<>だけを
元に戻してみましたが、うまくいきません。どなたかご教授願います。
言語はあとでPHPでも同様のものを作成する予定ですが、今はPerlです。

$text = "tt\"tt<3bbb\nst<a gg&tg;gg href=\"aaa\">bbb<\n";

print "before=\n";
print $text."\n\n";

$text =~ s/</</g; $text =~ s/>/>/g; $text =~ s/\"/"/g;

$text =~ s/<([^(>)]*)>/<$1>/g;

while ($text =~ /<([^>]*)\"\;([^>]*)>/) {
$text =~ s/<([^>]*)\"\;([^>]*)>/<$1\"$2>/g;
}

print "after=\n";
print $text."\n";

↓このように置換されることを想定しています。
tt"tt<3bbb
st<a gg&tg;gg href="aaa">bbb<


107:nobodyさん
07/07/20 05:26:31
久しぶりに実体参照の地雷を踏みまくってる投稿を見た。

108:106
07/07/20 05:38:28 wp5plGkY
「このように置換されることを想定しています。 」の部分で
実体参照の部分がそのまま表示されてしまったので全角で修正します。
よろしくお願いします。

tt&quot;tt&lt;3bbb
st<a gg&tg;gg href="aaa">bbb&lt;


109:nobodyさん
07/07/20 08:47:21
何がやりたいのかさっぱりだ。
どこまでがタグか解析してタグ以外のタグ文字を実体参照化したいということ?
それ元のテキストを生成してる時点で何か間違ってるだろ

110:nobodyさん
07/07/20 12:57:58
何かの内側と外側を判定するのは結構面倒だよなぁ。こないだ<a 〜>から</a>までの
間だけを操作しようと3分考えて、ネストがありえることに気付いて挫折した。

111:nobodyさん
07/07/20 13:08:08
って>>106読んでなかった。>>109に同感。
それじゃあどこからどこまで切れば良いのかわからない。

xxx<abcd<ddeg<eee<g<fhg>degh><qq>zzz

の時、何が保証されていて、どこからどこまでをタグと見なせばいいの。

112:106
07/07/21 01:21:27 VYWED9XA
ごめんなさい。説明が足りませんでした。
掲示板で投稿された書き込みに対して、上記のような処理をしたいと考えています。
>>106のスクリプトは処理を掲示板に組み込む前に処理の部分だけテストするために作成したものです。
$textは書き込み内容と想定しています。

一番内側の<>をタグと見なしたいです。
xxx<abcd<ddeg<eee<g<fhg>degh><qq>zzz
この場合ですと、<fhg>と<qq>をタグとみなし、他は実体参照化したいと考えています。


113:nobodyさん
07/07/21 02:45:37
つまりタグの定義は
<[^>]*>
ということですね。

114:106
07/07/21 08:55:35 VYWED9XA
>>113
左様です。


115:nobodyさん
07/07/21 09:30:47
違うだろ、<[^<]*?>だろ、112の定義なら。
それ以前に106はエスケープ、エンコード、サニタイズ処理で何か間違ってる
use HTML::Entities;
$tag_re = qr/<[^<]*?>/;
$text =~ s/($tag_re)|(.)/$1||encode_entities($2)/eg;
print $text;

116:nobodyさん
07/07/21 13:10:23 7GHIEbSO
PHPで
URLリンク(localhost)
URLリンク(localhost)
URLリンク(test.com)
から
/index.htm
/index.htm
/index.htm
これを出力したい場合

ereg_replace('^https?://(localhost|test.com)' ,'' ,$line);
これでは間違ってるでしょうか?
どなたか教えて下さい。お願いします




117:たけもー
07/07/27 23:18:07 boPeFaxI
PHPです。

就職率−6月(この全角−を)半角に変えたいです。
$a = ereg_replace("[−]", "-", $a);

どうしたらいいでしょうか?

118:nobodyさん
07/07/28 02:31:21 k6nESKD8
ereg_* はマルチバイト文字(全角文字)に対応していない。
mb_ereg_* か preg_* を使うといい。
ただしpreg_*のほうはUTF-8でないとダメだったと思う。


119:たけもー
07/07/28 15:25:04 9w1k0jgB
PHPです。

就職率−6月(この全角−を)半角に変えたいです。
$a = mb_ereg_replace("[−]", "-", $a);

mb_でもだめでした。
どうしたらいいでしょうか?


120:nobodyさん
07/07/28 15:37:30
文字コードとかどうなっとるん?

121:たけもー
07/07/28 16:32:13 9w1k0jgB
文字コードの意味がいまいちわからないんです、テキストディタは
Shift-JISです、

122:名無しさん@そうだ選挙に行こう
07/07/29 01:50:43
PHPは本職じゃないんで良く知らんのだが、PHP自体がデフォルトの
エンコーディングを持っていて、何も指定しないとそれ使うはずだから、
自分がSJIS指定しているつもりでも、そうでない可能性があるってこと。

<?php

echo mb_internal_encoding() . "\n";
echo mb_regex_encoding() . "\n";

$v = "就職率−6月";

mb_regex_encoding("sjis");
echo mb_regex_encoding() . "\n";

$v = mb_ereg_replace("[−]", "-", $v);

echo $v;

こんなんで置換はできたっぽい。
echo しているのは確認のためなんで気にしないでいい。
いずれにしろ mb_regex_encodingで設定しないとダメだった。



123:たけもー
07/07/30 07:40:51 DqqhKvmn
解決いたしましたw
ありがとうございますw

124:たけもー
07/07/30 21:23:25 TD8Lc2Id
解決したはずが・・・

file(http://)で取得した文字列がUTF-8で
UTF-8からsjisにしたら全角マイナスが消えてしまいます。
消えて、改行されています・・・
テストソースですので
mb_ereg_replace
などで置き換えなどは一切してません。

どうしてでしょうか?

125:nobodyさん
07/07/30 23:11:52
原因知ってるけど正規表現に何の関係が

126:nobodyさん
07/07/30 23:54:01
>>125
誘導してやってくれ。(PHPわからん)

127:nobodyさん
07/07/31 01:38:26
ちなみにPerlも同じだから。正規表現は関係ないけどね。

128:nobodyさん
07/07/31 02:17:21
>>126
変換に使っている変換表の問題(なので正規表現の問題じゃない)。
PHPで使っている変換表の素性はわからん。

ぐぐれば「波ダッシュ問題」あたりとならんで見つかると思うけど
どっかのスレで話題になったか、これ?

URLリンク(www.google.com)

ま、がんがって調べてくれ >たけもー


129:nobodyさん
07/07/31 02:24:36
△▲ WebProg 初心者の質問 Part15 ▼▽
スレリンク(php板)

ここ、かなあ。
つーか、元の要件でもこのスレと無関係な str_replace で済むじゃん。

130:nobodyさん
07/08/10 10:21:28 dRcI3VfS
PHPとか全く知らない者なのですが、利用しているBBSのアクセス禁止設定が
正規表現で指定しろと言うんです。勿論正規表現は知らないどころか初めて耳にしました。

a00abcd1.kngwnt01.ap.so-net.ne.jp
123.123.123.123.ap.yournet.ne.jp

前者のIPが何らかのコード1つに変換されるタイプと後者のIPがそのまま出るタイプの
リモホをそれぞれホスト単位で全て「正規表現で指定」するとずばりどういう表記になるのでしょう?

131:nobodyさん
07/08/10 10:29:11
ホスト数が少ないなら列挙すりゃいいんじゃね。
(xxx.example1.jp|xxx.example2.jp|xxx.example3.jp)

132:nobodyさん
07/08/10 13:25:55
ありがとうございます
なるほど…ひとつをピンポイントで指定する場合は
正規表現というのを使わなくても良いという事なのでしょうか…
130の前者だけなら
a00abcd1.kngwnt01.ap.so-net.ne.jp
と、そのまま指定、両方の二つなら
(a00abcd1.kngwnt01.ap.so-net.ne.jp|123.123.123.123.ap.yournet.ne.jp)
となるんでしょうか?

133:nobodyさん
07/08/10 18:16:54
>>132
そのものずばりというのも正規表現の一種だよ。
 a00abcd1.kngwnt01.ap.so-net.ne.jp
というのも正規表現だよ。

あと細かい話を言うと、ピリオド「.」は正規表現において任意の1文字にマッチするメタ文字なので、
ピリオドそのものにマッチさせたい(他の文字にはマッチさせたくない)ときには「.」の代わりに「¥.」を使う。

 a00abcd1¥.kngwnt01¥.ap.so-net¥.ne¥.jp

んでも、この場合はそこまでしなくても問題はなさそうだけどね。

134:nobodyさん
07/08/10 22:15:38
>>133
どうもありがとうございました!大変参考になりました
というかこれを機会にちょっと勉強してみます…
ありがとうございました

135:nobodyさん
07/08/11 01:30:22 2Sf3pkhN
.*

.+
は、完全に同じ意味と考えてもOKですか?
それとも、何か挙動が変わってくることはありえますか?

136:nobodyさん
07/08/11 02:02:02
.+ 1文字以上の任意の文字列
.* 0文字以上の任意の文字列
で最初から違ってましたね
ナハハ…

137: ◆xIL6SyuS5U
07/08/11 02:39:04
a

138:nobodyさん
07/08/14 22:01:22
perl互換のPHP正規表現を勉強し始めたのですが、
3.3以上に該当するの文字列っていうのは、できますでしょうか?
たとえば3.3.4や3.5、9.0などです。
バージョンのようなものです。
やはり数値型でないと難しいのでしょうか。

139:nobodyさん
07/08/14 22:20:59
バージョン番号文字列って数値型にしてもめんどくさいんだよね。
3.10.0 とかね、真面目にやろうとすると、
'.' で split して、上の桁から順に整数値として比較していく、
みたいにやらないといけなかったりして。

140:nobodyさん
07/08/14 23:03:21
>>139
3.3以上っていう決まりだけならどうかけますかね?
3.2があてはまらなければ大丈夫なんですが。

141:nobodyさん
07/08/15 00:01:44
/\A(?:(?:[1-9]\d+|[4-9])(?:\.(?:[1-9]\d*|0))*|3\.(?:[3-9](?:\.(?:[1-9]\d*|0))*))\z/

142:nobodyさん
07/08/15 00:28:29
3.10 も 3.20 も蹴っていいの?

143:141
07/08/15 01:17:11
うわボケてたアルよ。

/\A(?:(?:[1-9]\d+|[4-9])(?:\.(?:[1-9]\d*|0))*|3\.(?:(?:[1-9]\d+|[3-9])(?:\.(?:[1-9]\d*|0))*))\z/

144:nobodyさん
07/08/15 22:05:09
>>141
ありがとー!ちょっと見てみます!

>>142
厳密にどういった値があり得るのかも分からないのでそこまで細かくしなくてもいいかなという感じです。
バージョンというか、ユーザーエージェントの後によくついている数値なんですが。


145:nobodyさん
07/09/01 14:16:44 tMwZKBAJ
"*"をWebで調べると「直前の文字0回以上の繰り返しにマッチ」とでてくる。
UNIXで
% ls
a0/ a1/ a2/
のとき
% cd *1
ができるけど*は何の繰り返し???

*は何でもマッチと思っていたのは間違いですか???




146:nobodyさん
07/09/01 15:26:18 epTGamb+
>>145
Perl互換の正規表現では 「*」 は量指定子というものの一種でありまして、 文字、 文字クラス、 グループの直後に付き、
それらに0回以上の繰り返しという意味を持たせるのですが、 正規表現体系が違えば 「*」 が違うことを意味することもありましょう。

147:nobodyさん
07/09/01 15:34:18 epTGamb+
要するに、 正規表現体系が違えば記号の意味も異なるということです。

148:nobodyさん
07/09/01 15:58:40 tMwZKBAJ
>>146
>>147
理解しました。ありがとうございました。

149:nobodyさん
07/09/01 16:54:59 fGUplrri
[2ch公式広告]

一瞬、ハーバーライフと間違えるところだった。。
違うよ、コレは。

ヤフオク関連の最強情報
これを知らずして、ヤフオクで稼ぐことは出来ない。(キッパリ)

URLリンク(2ch2.net)

150:nobodyさん
07/09/02 03:27:50
>>145-148

待てw


151:nobodyさん
07/09/02 03:54:38
>>150
どっちも「それは正規表現じゃねえよ」からグダグダと書いても仕方ないから
待たせなくてよい。

152:nobodyさん
07/09/02 09:50:38 RtluGpKC
192.168.50.5 //OK
192.168.*.* //OK
1000.1000.1000.1000/OK
*.168.50.5 //NG

(\d+)(\.([*(\d+)])){3}
なぜこれでダメ?


153:nobodyさん
07/09/02 11:04:51 tGLa/mAn
>>150-151
正規表現とは文字列の集合を表現する手段でありますから、
ワイルドカードを用いた表現も正規表現の一種であります。

154:nobodyさん
07/09/02 11:20:25 tGLa/mAn
>>152
> (\d+)(\.([*(\d+)])){3}

これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。

> *.168.50.5

これは数字の後、 ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が2回しか繰り返していないので、
先ほどの正規表現にマッチしません。

155:nobodyさん
07/09/02 11:40:01 tGLa/mAn
いや、 待ってください。

> (\d+)(\.([*(\d+)])){3}

だと、

> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5

のすべてにマッチしないはずです。 先ほど

> これは数字があり、 その後ピリオドと 「*」、 「(」、 数字、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現です。

と申しましたが、 より正確には、

・ 数字が1つ以上あり、 その後ピリオドと 「*」、 「(」、 数字1つ、 「)」、 「+」 のどれかの組が3回繰り返す文字列群の表現

でありまして、

> 192.168.50.5
> 192.168.*.*
> 1000.1000.1000.1000
> *.168.50.5

のどれもそのような文字列ではないからです。

156:nobodyさん
07/09/02 12:28:15
\.

157:nobodyさん
07/09/02 13:10:37
どうせ1000がいやんって話なんだろうけど、0から255までの
数字だけがマッチする正規表現ってむずくね?
[0-9]|[12][0-2]?[0-9]|[12]?[34][0-9]|1?[5-9][0-9]|25[0-5]
とか
[0-9]|1[0-9][0-9]?|2[0-4]?[0-9]|[3-9][0-9]|25[0-5]
とか

158:nobodyさん
07/09/02 19:09:05
PHPのPerl互換の正規表現のことで質問です。

次のような文章があったとします。
左のは行番号で、実際の文章中にはありません。

01.<div>
02.text
03.<img>
04.</div>
05.
06.<div>
07.text1
08.text2
09.</div>
10.
11.<div>
12.hoge
13.<img>
14.</div>

ちなみにドットは改行にもマッチするようにしておきます。
これに対してパターン「<div>\n(.+)\n</div>」を最小マッチさせると、
サブパターンで02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれるんですが、

今度は<img>を含むdivだけをマッチさせようとして、「<div>\n(.+\n<img>)\n<div>」で最小マッチをさせると、
02,03と07,08,09,10,11,12,13行目にマッチしてしまいます。
ここで02,03と12,13行目だけにマッチさせるにはどうすればいいのでしょうか?
いろいろ考えたのですがよくわかりません。
どなたかよろしくお願いします。

159:nobodyさん
07/09/02 19:35:53 /HflMMhV

すいません
「02,03と07,08と12,13と17,18,19,20行目がそれぞれきちんとマッチしてくれる」は
02,03と07,08と12,13の間違いですね

160:nobodyさん
07/09/02 20:08:53
すいません自己解決しました
「<div>\n((?:[^<]|<(?!div))+\n<img>)\n<div>」
これでいけるんですね

161:nobodyさん
07/09/04 05:14:07 p30GnV0e
IPアドレスの正規表現についてやっぱりわからなかったです。
2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?
192.168.50.*
192.168.*.*
192.*.*.*
192.168.50.5
1000.1000.1000.1000
これらはすべてOKとします。


162:nobodyさん
07/09/04 09:42:52
>>161
> 2オクテッド目以降は*が来てもOKとするにはどうすればよいでしょうか?

それ先に言えよ!
どういう結果が欲しくて、どう書いたら、どうダメだったか、を具体的に書かんと。
あと、使用してる処理系 (言語やソフトウェア) も。

で、ダメだった正規表現中の [*(\d+)] だけど、
[] は「文字クラス」の正規表現なので、
>>154 の言っているように * ( 数字 + ) のいずれかの「文字」を表す。
「* または数字」を表現したいのであれば、 (\*|\d+) みたいにする。

ので、こうかな。
(\d+)(\.(\*|\d+)){3}

163:nobodyさん
07/09/04 11:21:03 /G1gxUUQ
$` (マッチした文字列の前にあるすべての文字列 )
↑これの使い方を教えてください。言語はPerlです。

164:nobodyさん
07/09/04 11:29:12
>>163

"hoge" =~ /og/;
print join(",", $`, $&, $'), "\n";

↑こんな感じで、この場合は "hoge" に対して "og" がマッチするので、
$`, $&, $' にはそれぞれ "og" の前の "h", "og", "og" の後ろの "e" が格納される。


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

5311日前に更新/179 KB
担当:undef