preg_match在php中无法正常工作

zhi*_*ong 0 php regex

所有,

我使用preg_match来过滤一些数据,奇怪的是,它无法正常工作.我是regex的新手,我使用php live regex网站检查我的正则表达式,它正常工作.所以我不知道这里有什么问题.我想让preg_match在$ string中找到类似"a\_b"的内容:

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

但奇怪的是,即使我在上面这个例子中有一个$ string,preg_match的结果是0.但是当我把它改为

preg_match("/\\_[a-zA-Z]/", $string)
Run Code Online (Sandbox Code Playgroud)

它工作正常并返回1.但当然这不是我想要的.任何的想法?非常感谢〜

Spu*_*ley 5

preg_match从我所看到的,你根本不需要它.

然而,你遇到的问题是逃避.

你有这个: "/[a-zA-Z]\\_[a-zA-Z]/"

您已经正确识别出需要转义反斜杠,但是,您错过了一个微妙的问题:

PHP中的正则表达式是字符串.这意味着您需要将其作为字符串以及正则表达式进行转义.实际上,这意味着要正确地转义反斜杠以使其在模式中与实际的反斜杠字符匹配,实际上需要有四个反斜杠.

"/[a-zA-Z]\\\\_[a-zA-Z]/"
Run Code Online (Sandbox Code Playgroud)

它不漂亮,但就是这样.

希望有所帮助.