WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:パターンマッチ

はるか [WriteDate : Sun May 20 02:14:05 2001]

Perlの正規表現で、例えば
$search に検索する文字列が入っていたとして、

$a =~ s/$search/<TAG>$search</TAG>/g;

を実行したとします。
この場合、もし $search が例えば
$search = "(あいう)+";
となっていた場合、マッチするのは
「(あいう)+」なんでしょうか?それとも「あいうあいう・・・」なんでしょうか?

非常に初歩的な質問ですいません。
教えて下さい。お願いいたします。


andi [WriteDate : Sun May 20 03:11:46 2001]

試されましたか?


はるか [WriteDate : Sun May 20 20:42:28 2001]

試しました。
文字列を検索する機能を付けたのですが、
検索する文字列に「.」を指定すると、全ての文章がマッチしてしまうのです・・・。


安芸川晴海 [MAIL] [URL] [WriteDate : Sun May 20 23:23:09 2001]

$search =~ s/\./\\\./g;
したらどうでしょうか。


綾小路 [MAIL] [URL] [WriteDate : Mon May 21 04:05:49 2001]

試す時に、$searchの内容を出力してみら如何でしょう?
あと
$a =~ s/$search/<TAG>$search</TAG>/g;
この書式ですと、多分ダメかと思います。
$a =~ s/$search/<TAG>$search<\/TAG>/g;
これで、取りあえず大丈夫のような気がしますが・・・
外してたら、申し訳有りません


Nobu3 [URL] [WriteDate : Mon May 21 10:46:23 2001]

>検索する文字列に「.」を指定すると、全ての文章がマッチしてしまうのです・・・。
これは「$searchが正規表現として解釈された」ので
>検索する文字列に「.」を指定すると、全ての文章がマッチしてしまうのです・・・。
は正しい動作です。

で、これをやりたくなければ正規表現で特殊な意味を持つ文字を、すべてエスケープしなければなりません。
なので、私がやるなら
$a =~ s/(\Q$search\E)/<TAG>$1<\/TAG>/g;
こんな感じですか。

もし頻繁に「/」が存在するなら、区切りを他の文字(「|」とか)にしますけど。
$a =~ s|(\Q$search\E)|<TAG>$1</TAG>|g;


Nobu3 [URL] [WriteDate : Mon May 21 10:52:15 2001]

あら、最初の引用は同じですね (^^;;;

ともかく、変数を指定しても「変数を展開した形でマッチングを行う」ので、変数内に(正規表現として)特殊な文字があると「特殊なまま」使われると言う事です。たしか。


はるか [WriteDate : Mon May 21 13:24:44 2001]

みなさん、本当にありがとうございます。

>$a =~ s/$search/<TAG>$search</TAG>/g;
>この書式ですと、多分ダメかと思います。
すいません...ミスでした・・・(^^;)

>$searchが正規表現として解釈された
では正規表現に変数を入れると展開してしまって正規表現として解釈してしまうということですね?
つまり、「.」とか「$」とかを全部「\.」「\$」にするということですよね?

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]
ChaichanPAPA's World