Ive*_*lin 2 php regex preg-match
我的 PHP 代码如下所示:
$input = "City.name = '纽约'"; $literal_pattern = '/\'.[^\']*\'/'; preg_match($literal_pattern, $input, $token); 回声 $token[0]; // 打印“纽约”
我的正则表达式需要使用转义的单引号获取文字,例如:
$input = "City.name = '纽约\'纽约'"; $literal_pattern = ???????????; preg_match($literal_pattern, $input, $token); 回声 $token[0]; // 应该打印 'New \' York'
$literal_pattern 的规则是什么?
没有这个条件,简单...
/('[^']*')/
Run Code Online (Sandbox Code Playgroud)
...当然就足够了:匹配“单引号,后跟任意数量的非单引号符号,再后跟单引号”的所有序列。
但是因为我们需要为两件事做好准备——“正常”和“逃逸”。所以我们应该在我们的模式中添加一些香料:
/('[^'\\]*(?:\\.[^'\\]*)*')/
Run Code Online (Sandbox Code Playgroud)
它可能看起来很奇怪(确实如此),但实际上也很简单:匹配...的序列
'或\),例子:
$input = "City.name = 'New \\' York (And Some Backslash Fun)\\\\'\\'";
# ...as \' in any string literal will be parsed as a _single_ quote
$pattern = "/('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')/";
# ... a choice: escape either slashes or single quotes; I choose the former
preg_match($pattern, $input, $token);
echo $token[0]; // 'New \' York (And Some Backslash Fun)\\'
Run Code Online (Sandbox Code Playgroud)