使用preg_match_all查找带有转义撇号的字符串

时间:2015-08-26 15:31:18

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

我试图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;

输出:null。

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

1 个答案:

答案 0 :(得分:1)

您可以使用:

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

<强>输出:

a person.

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