0

全て、

一部のデータをフィルタリングするために preg_match を使用していますが、正しく機能しないのは奇妙です。私は正規表現が初めてで、正常に動作する正規表現を確認するためにphpライブ正規表現Webサイトを使用しました。したがって、ここで何が問題なのかわかりません。$string で "a\_b" のようなものを見つけるために preg_match を使用したいと思います。

$string="aaa\_bbb:ccc"
if(preg_match("/[a-zA-Z]\\_[a-zA-Z]/", $string)){
    $snew = str_replace('\_', "_", $string);
}

しかし、上記の例のように $string を持っていても、preg_match の結果が 0 になるのは奇妙です。

preg_match("/\\_[a-zA-Z]/", $string)

それは正常に動作し、1 を返します。もちろん、それは私が望んでいるものではありません。何か案が?どうもありがとう〜

4

3 に答える 3

5

私が見る限り、まったく必要ありませんpreg_match

しかし、あなたが抱えている問題は、エスケープに関係しています。

あなたはこれを持っています:"/[a-zA-Z]\\_[a-zA-Z]/"

バックスラッシュをエスケープする必要があることは正しく認識していますが、微妙な問題を見落としています。

PHP の正規表現は文字列です。これは、正規表現だけでなく文字列としてもエスケープする必要があることを意味します。実際には、これはバックスラッシュを正しくエスケープしてパターン内の実際のバックスラッシュ文字として一致させるには、実際には4 つのバックスラッシュが必要であることを意味します。

"/[a-zA-Z]\\\\_[a-zA-Z]/"

綺麗じゃないけどこんなもんかな。

それが役立つことを願っています。

于 2013-10-15T11:47:12.840 に答える
3

使用する:

if(preg_match("/[a-zA-Z]\\\\_[a-zA-Z]/", $string))

代わりは

于 2013-10-15T11:45:57.847 に答える