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


Using preg_match_all to find a string with an escaped apostrophe

我正在尝试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;

output : null.

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

您可以使用:

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

a person.

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