预赛或\在PHP中
我正在努力匹配或者/在PHP中使用preg_match 我以为这样就可以了,但它匹配所有字符串预赛或\在PHP中,php,regex,Php,Regex,我正在努力匹配或者/在PHP中使用preg_match 我以为这样就可以了,但它匹配所有字符串 $string = ''; $chars = '/(\.|\\|\/)/'; if (preg_match($chars, $string) != 0) { echo 'Chars found.'; } 问题可能在于PHP。在转义正则表达式字符串中的内容时,还需要转义用于转义的反斜杠,否则PHP将尝试将其解释为特殊字符 因为这可能没有道理,请举个例子 $string=“\”将使PHP尝试逃逸
$string = '';
$chars = '/(\.|\\|\/)/';
if (preg_match($chars, $string) != 0) {
echo 'Chars found.';
}
问题可能在于PHP。在转义正则表达式字符串中的内容时,还需要转义用于转义的反斜杠,否则PHP将尝试将其解释为特殊字符 因为这可能没有道理,请举个例子
$string=“\”
将使PHP尝试逃逸,并失败。相反,您需要将其更改为$string=“\\\”
问题可能与PHP有关。在转义正则表达式字符串中的内容时,还需要转义用于转义的反斜杠,否则PHP将尝试将其解释为特殊字符
因为这可能没有道理,请举个例子
$string=“\”
将使PHP尝试逃逸,并失败。如果逻辑有缺陷,则需要将此更改为$string=“\\\.”
您的。将返回匹配数。因此,==0
表示“没有匹配项”
也就是说,除了\'
和\
之外,不要展开转义序列。您需要将反斜杠转义加倍,以便它按预期显示在正则表达式中。将代码更改为:
$string = '';
$chars = '/(\.|\\\\|\/)/';
if (preg_match($chars, $string) != 0) {
echo 'Chars found.';
}
下面是一个测试用例:
$strings = array('', '.', '/', '\\', 'abc');
$pattern= '/(\.|\\\\|\/)/'
foreach($strings as $string) {
if (preg_match($pattern, $string) > 0) {
printf('String "%s" matched!', $string);
}
}
您的if
逻辑有缺陷。将返回匹配数。因此,==0
表示“没有匹配项”
也就是说,除了\'
和\
之外,不要展开转义序列。您需要将反斜杠转义加倍,以便它按预期显示在正则表达式中。将代码更改为:
$string = '';
$chars = '/(\.|\\\\|\/)/';
if (preg_match($chars, $string) != 0) {
echo 'Chars found.';
}
下面是一个测试用例:
$strings = array('', '.', '/', '\\', 'abc');
$pattern= '/(\.|\\\\|\/)/'
foreach($strings as $string) {
if (preg_match($pattern, $string) > 0) {
printf('String "%s" matched!', $string);
}
}
在尝试正则表达式匹配斜杠时,我强烈建议使用不同于“/”的分隔符。它减少了您需要执行的转义操作,并使其更具可读性:
$chars = '%(\.|\\|/)%';
在尝试正则表达式匹配斜杠时,我强烈建议使用不同于“/”的分隔符。它减少了您需要执行的转义操作,并使其更具可读性:
$chars = '%(\.|\\|/)%';
试试这个:
$chars = '%(\.|\\\\|/)%'
试试这个:
$chars = '%(\.|\\\\|/)%'
提供给preg_match()
的参数是字符串。字符串由PHP自动转义。例如,如果给regexp引擎指定了{\\\\}
(反斜杠),PHP将首先解析它,创建{\\\}
(\\
替换为\
)
接下来,regexp引擎解析regexp。它可以看到PHP提供给regexp引擎的{\\}
。它将\
视为转义字符,因此它实际上匹配由\
转义的\
字符
在您的例子中,它看起来像/(\.\\\\\\\\/)/
。PHP提供给regexp引擎/(\.\\\\\/)/
,它实际上是
或
(注意
字符被转义)
就我个人而言,我尽量避免转义元字符,尤其是在regexp引擎的工作方式方面。我通常使用[.]
来代替,它更具可读性。用它编写的regexp看起来像/([.]\\\\\\\\\\\\\\\\\\\\\\[/])/
可以进行一些优化。虽然这是我个人的事情,但我更喜欢使用{}
作为分隔符(是的,可以使用成对字符)。此外,您的regexp匹配单个字符,因此您可以轻松地将其编写为{[.\\\/]}
,在我看来这是非常可读的(注意四个斜杠,因为PHP和regexp引擎都需要解析反斜杠)
另外,preg_match()
返回匹配数。它总是比<代码> 0 更大,因此您可以很容易地认为它是布尔型的,并且避免写入<代码>=0 < /COD>。相反,您可以插入在字符串之前编码>使其为负值。但我认为您意外地改变了条件(如果不匹配,则匹配)。有效代码如下:
$string = '';
$chars = '{[.\\\\/]}';
if (preg_match($chars, $string)) {
echo 'Chars found.';
}
提供给preg_match()
的参数是字符串。字符串由PHP自动转义。例如,如果给regexp引擎指定了{\\\\}
(反斜杠),PHP将首先解析它,创建{\\\}
(\\
替换为\
)
接下来,regexp引擎解析regexp。它可以看到PHP提供给regexp引擎的{\\}
。它将\
视为转义字符,因此它实际上匹配由\
转义的\
字符
在您的例子中,它看起来像/(\.\\\\\\\\/)/
。PHP提供给regexp引擎/(\.\\\\\/)/
,它实际上是
或
(注意
字符被转义)
就我个人而言,我尽量避免转义元字符,尤其是在regexp引擎的工作方式方面。我通常使用[.]
来代替,它更具可读性。用它编写的regexp看起来像/([.]\\\\\\\\\\\\\\\\\\\\\\[/])/
可以进行一些优化。虽然这是我个人的事情,但我更喜欢使用{}
作为分隔符(是的,可以使用成对字符)。此外,您的regexp匹配单个字符,因此您可以轻松地将其编写为{[.\\\/]}
,在我看来这是非常可读的(注意四个斜杠,因为PHP和regexp引擎都需要解析反斜杠)
另外,preg_match()
返回匹配数。它总是比<代码> 0 更大,因此您可以很容易地认为它是布尔型的,并且避免写入<代码>=0 < /COD>。相反,您可以插入在字符串之前编码>使其为负值。但我认为您意外地改变了条件(如果不匹配,则匹配)。有效代码如下:
$string = '';
$chars = '{[.\\\\/]}';
if (preg_match($chars, $string)) {
echo 'Chars found.';
}
你试过了吗?是否有错误?所有内容都匹配,而不仅仅是带有。\or/的字符串。我没有错,你试过了吗?是否有错误?所有内容都匹配,而不仅仅是带有。\or/的字符串。我没有收到错误。不是在使用单引号的时候。不是在使用单引号的时候。啊,我已经更新了我的代码。在我的例子中,这只是一个输入错误。问题依然存在。啊,我有你