preg_match在php中无法正常工作

preg_match在php中无法正常工作,php,regex,Php,Regex,全部, 我使用preg_match过滤一些数据,奇怪的是,它不能正常工作。我是新来的正则表达式,我使用了一个php live正则表达式网站来检查我的正则表达式,它工作正常。所以我不知道这里出了什么问题。 我想让preg_match在$string中找到类似“a\\u b”的内容: $string="aaa\_bbb:ccc" if(preg_match("/[a-zA-Z]\\_[a-zA-Z]/", $string)){ $snew = str_replace('\_', "_", $

全部,

我使用preg_match过滤一些数据,奇怪的是,它不能正常工作。我是新来的正则表达式,我使用了一个php live正则表达式网站来检查我的正则表达式,它工作正常。所以我不知道这里出了什么问题。 我想让preg_match在$string中找到类似“a\\u b”的内容:

$string="aaa\_bbb:ccc"
if(preg_match("/[a-zA-Z]\\_[a-zA-Z]/", $string)){
    $snew = str_replace('\_', "_", $string);
}
但奇怪的是,即使我有上面这个例子中的$string,preg_匹配的结果也是0。但是当我把它改成

preg_match("/\\_[a-zA-Z]/", $string)
它工作正常,返回1。但这当然不是我想要的。有什么想法吗?
非常感谢~

您完全不需要
预匹配
,只需使用以下正则表达式进行替换:

/([a-zA-Z])\\\\_([a-zA-Z])/
然后替换为
$1\u$2
,如下所示:

$result = preg_replace("/([a-zA-Z])\\\\_([a-zA-Z])/", "$1_$2$, $string);
使用:

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

相反

在我看来,你根本不需要
预匹配

然而,你遇到的问题是逃跑

你有:
“/[a-zA-Z]\\\\[a-zA-Z]/”

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

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

"/[a-zA-Z]\\\\_[a-zA-Z]/"
这并不漂亮,但事实就是这样


希望这能有所帮助。

为什么preg_与此匹配?只需执行
str_replace
-如果字符串存在,它将被替换-如果不存在,它将不被替换,obviously@AlmaDo Mundo,我给出的$string就是一个例子,我有更多的数据,比如“aaa/_-bbb”和“aaa,_-bbb”,我不想替换它们。@zhikong-这没有任何区别;
str_replace
仍将仅用反斜杠替换该字符。另外,如果您确实需要一个正则表达式,您是否考虑过使用
preg\u replace
在一行中执行这两个操作?@Sniffer,我正在为数据库生成sql文件,但由于某些原因,类似于“aaa\u bbb:ccc”类型的字符串,“\”没有正确地转义数据,并且我得到了“未知命令”错误。我试着在将“u”替换为“u”之后,就可以导入sql文件了correctly@Spudley,但preg_匹配有助于首先过滤行,如果其他情况为“aaa/_bbb”和“aaa,_bbb”,则不会处理。我认为这样会更有效率。谢谢,是的,使用preg_替换是better@zhihong如果这个答案解决了你的问题,你应该接受它。