Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不能';在Php正则表达式中,我们无法比较四个斜杠来得到一个斜杠_Php_Regex - Fatal编程技术网

不能';在Php正则表达式中,我们无法比较四个斜杠来得到一个斜杠

不能';在Php正则表达式中,我们无法比较四个斜杠来得到一个斜杠,php,regex,Php,Regex,我正在尝试打印日期,以检测此格式的日期dd\mm\yyyy,并且我已经阅读了stackoverflow,我必须使用它来使用正则表达式查找斜杠斜杠 所以我就这样做了, $dob = "01\01\2014"; preg_match("/\d{2}\\\\\d{2}\\\\\d{4}/",$dob) 但是当我在if块中运行它时,它总是返回false,但是当我用-替换斜杠时,就像这样 $dob = "01-01-2014"; 及 那么它就可以正常工作了 这是我用反斜杠表示日期的完整代码 <?

我正在尝试打印日期,以检测此格式的日期
dd\mm\yyyy
,并且我已经阅读了stackoverflow,我必须使用它来使用正则表达式查找斜杠
斜杠

所以我就这样做了,

$dob = "01\01\2014";
preg_match("/\d{2}\\\\\d{2}\\\\\d{4}/",$dob)
但是当我在
if
块中运行它时,它总是返回
false
,但是当我用
-
替换
斜杠时,就像这样

$dob = "01-01-2014";

那么它就可以正常工作了

这是我用反斜杠表示日期的完整代码

<?php       
    $dob = "01\01\2014";
    $err_msg = "none";
    if (preg_match("/\d{2}\\\\\d{2}\\\\\d{4}/",$dob)){
        $err_msg = "<p>Correct</p>";
    }
    echo $err_msg;
?>

代码运行得很好

<?php       
    $dob = "01-01-2014";
    $err_msg = "none";
    if (preg_match("/\d{2}-\d{2}-\d{4}/",$dob)){
        $err_msg = "<p>Correct</p>";
    }
    echo $err_msg;
?>

您只需要
3
。一个用于转义
\
,另一个用于转义
d
。请参阅演示

您只需要
3
。一个用于转义
\
,另一个用于转义
d
。请参阅演示

这应该可以:

$dob = "01\\01\\2014";
if (preg_match("/\d{2}\\\\\d{2}\\\\\d{4}/",$dob)) {
   echo "matched\n";
}
基本上,在原始变量中保留
\\
,以在变量中获得反斜杠。

这应该可以:

$dob = "01\\01\\2014";
if (preg_match("/\d{2}\\\\\d{2}\\\\\d{4}/",$dob)) {
   echo "matched\n";
}


基本上,将
\\
保留在原始变量中以获得变量中的反斜杠。

它仍然不起作用,但另一个人的答案起作用。您的答案在您提供的链接中有效,但在PHP中无效,这是为什么?@RileyWillow
$dob
“01\01\2014
完全相同。因为另一个答案修改了
$dob
我明白了,但是当我尝试这个
预匹配(/\d{2}\\\\\\d{2}\\\\\\\\\\d{4}/”,$dob)
它不起作用,但此模式在您的演示链接中起作用provided@RileyWillow
“01\01\2014“
此处
\1
可能是转义码。因此,此字符串正在转换为其他形式。另一种方法是correct@RileyWillow它在regex101上工作的原因是因为那里的
\1
\1
不是一些转义代码它仍然不工作,但另一个人的答案是有效的。您的答案在您提供的链接中有效,但在PHP中无效,这是为什么?@RileyWillow
$dob
“01\01\2014
完全相同。因为另一个答案修改了
$dob
我明白了,但是当我尝试这个
预匹配(/\d{2}\\\\\\d{2}\\\\\\\\\\d{4}/”,$dob)
它不起作用,但此模式在您的演示链接中起作用provided@RileyWillow
“01\01\2014“
此处
\1
可能是转义码。因此,此字符串正在转换为其他形式。另一种方法是correct@RileyWillow它在regex101上工作的原因是因为
\1
\1
而不是一些转义码如果斜杠是向前的呢?而且,
$dob
中只有一个斜杠,不是两个正斜杠不需要转义,而是反斜杠需要两个转义。是的,它确实是一个反斜杠。当您使用
echo$dob它将只显示一个反斜杠,因为\\使其成为字符串中的一个反斜杠<代码>echo“01\01\2014”
将输出一组无效的字符。但是,
$dob
的值是用户输入的,因此用户将始终输入一个斜杠,而不是两个斜杠,然后我必须用两个字符替换单个字符以匹配模式,同样,如果我尝试
preg_match(“/\d{2}/\d{2}/\d{4}/”,$dob)
要匹配正斜杠,它在php上不起作用,但如果斜杠是正斜杠,它会很好地匹配?而且,
$dob
中只有一个斜杠,不是两个正斜杠不需要转义,而是反斜杠需要双转义。是的,它确实是一个反斜杠。当您使用
echo$dob它将只显示一个反斜杠,因为\\使其成为字符串中的一个反斜杠<代码>echo“01\01\2014”
将输出一组无效的字符。但是,
$dob
的值是用户输入的,因此用户将始终输入一个斜杠,而不是两个斜杠,然后我必须用两个字符替换单个字符以匹配模式,同样,如果我尝试
preg_match(“/\d{2}/\d{2}/\d{4}/”,$dob)
要匹配正斜杠,它在php上不起作用,但在为变量使用单引号时匹配得很好,您会很好:
$dob='01\01\2014'。请注意,您的检查将确定日期,例如
31\99\2015
,因为您只检查位数。也许你想看看这个方法。对变量使用单引号,你会没事的:
$dob='01\01\2014'。请注意,您的检查将确定日期,例如
31\99\2015
,因为您只检查位数。也许你想看看这个方法。
$dob = "01\\01\\2014";
if (preg_match("/\d{2}\\\\\d{2}\\\\\d{4}/",$dob)) {
   echo "matched\n";
}