【问题标题】:Using preg_match_all to find a string with an escaped apostrophe使用 preg_match_all 查找带有转义撇号的字符串
【发布时间】:2015-08-26 15:31:18
【问题描述】:

我正在尝试 preg_match_all 一个我从用户输入中获得的字符串,其中包含一个撇号。首先,我在常规字符串上对其进行了测试,以查看它是否匹配,并且确实如此。但是,当我尝试在相同的用户输入字符串上对其进行测试时,它不起作用。我认为这是因为在我比较它们之前,用户输入中的撇号被转义了。

$temp1 = "I'm a person.";

preg_match_all('/I\'m\s+(.+)/i', $temp1, $matches);
$temp1 = $matches[1][0];
echo $temp1;

输出: 一个人。

但是,由于我是从用户输入中获取 $temp 并转义撇号,所以当它取出时它会转义撇号,因此它不匹配:

$temp2 = "I\'m a person.";

preg_match_all('/I\'m\s+(.+)/i', $temp2, $matches);
$temp2 = $matches[1][0];
echo $temp2;

输出:空。

我该如何解决这个问题?谢谢。

【问题讨论】:

    标签: php regex string escaping preg-match-all


    【解决方案1】:

    你可以使用:

    preg_match_all('/I\\\\\'m\s+(.+)/i', $temp2, $matches);
    echo $matches[1][0];
    

    输出:

    a person.
    

    使用\\\\ 匹配输入中的单个反斜杠。

    【讨论】:

    • 我不得不说所有这些转义有点奇怪,哈哈。但它有效。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-10-24
    • 2021-08-27
    • 2017-01-30
    • 2011-02-08
    • 2011-05-12
    • 2019-05-05
    • 1970-01-01
    • 2011-01-25
    相关资源
    最近更新 更多