gpt4 book ai didi

php - 用于匹配字符串中单引号单词并忽略转义单引号的正则表达式模式

转载 作者:行者123 更新时间:2023-12-05 08:59:34 27 4
gpt4 key购买 nike

我的 PHP 代码如下所示:

$input = "City.name = 'New York'";$literal_pattern = '/\'.[^\']*\'/';preg_match($literal_pattern, $input, $token);echo $token[0]; // prints 'New York'

我的正则表达式需要获取带有转义单引号的文字,例如:

$input = "City.name = 'New \' York'";$literal_pattern = ???????????;preg_match($literal_pattern, $input, $token);echo $token[0]; // should prints 'New \' York'

$literal_pattern 的规则是什么?

最佳答案

没有这个条件,简单...

/('[^']*')/

...当然就足够了:匹配“单引号,后跟任意数量的非单引号符号,再后跟单引号”的所有序列。

但是因为我们需要在这里为两件事情做好准备——“正常”和“逃脱”。所以我们应该为我们的模式添加一些香料:

/('[^'\\]*(?:\\.[^'\\]*)*')/

它可能看起来很奇怪(确实如此),但它实际上也很简单:匹配...的序列

  • 单引号...
  • ...后跟零个或多个“正常”字符(不是'\),
  • ...后跟(“转义”符号,然后是零个或多个“正常”符号)的子表达式,重复 0 次或多次...
  • 后跟单引号。

例子:

$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)\\'

关于php - 用于匹配字符串中单引号单词并忽略转义单引号的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13261250/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com