Php 如何选择全部";那不';它的前后都没有空间吗?
这是我的: 下面是当前的示例:Php 如何选择全部";那不';它的前后都没有空间吗?,php,regex,Php,Regex,这是我的: 下面是当前的示例: $str = 'this i"s a "test" word i"s"s'; 现在的结果是:(替换为$1$2) 以下是预期结果: $str = 'this is a "test" word iss'; 我如何才能做到这一点?使用此lookahead和lookback正则表达式进行搜索: /(?<!\s)"(?!\s)/ /(?:匹配双引号 (?!\s):负前瞻,表示前面没有空格 使用此lookahead和lookback正则表达式进行搜索: /(?&l
$str = 'this i"s a "test" word i"s"s';
现在的结果是:(替换为$1$2
)
以下是预期结果:
$str = 'this is a "test" word iss';
我如何才能做到这一点?使用此lookahead和lookback正则表达式进行搜索:
/(?<!\s)"(?!\s)/
/(?:匹配双引号
(?!\s)
:负前瞻,表示前面没有空格
使用此lookahead和lookback正则表达式进行搜索:
/(?<!\s)"(?!\s)/
/(?:匹配双引号
(?!\s)
:负前瞻,表示前面没有空格
我将使用单词边界作为示例输入和预期结果。无需查找和捕获组
代码:()
输出:
this is a "test" word iss
有时Stackoverflow上的用户会要求一件特定的事情,但实际上会有不同的解释——这就是我扩展问题要求解释的原因。这可能有助于OP和/或有助于未来的读者
或者,如果我们是超级文字,那么这种模式最适合匹配前面或后面没有空格的双引号:~(?我将使用单词边界作为示例输入和预期结果。无需查找和捕获组
代码:()
输出:
this is a "test" word iss
有时Stackoverflow上的用户会要求一件特定的事情,但实际上会有不同的解释——这就是我扩展问题要求解释的原因。这可能有助于OP和/或有助于未来的读者
或者,如果我们是超级文字,那么这种模式最适合匹配不带空格的双引号:~(?我建议使用更灵活的:
我使用一个捕获组来搜索好的案例,有问题的双引号会被扔进垃圾箱
它有助于处理特殊情况,例如,如图所示,在末尾使用标点符号。但添加更多要排除的情况很容易。请参阅:
:
输出:这是一个“测试”单词iss。不是“测试”。
我建议使用更灵活的:
我使用一个捕获组来搜索好的案例,有问题的双引号会被扔进垃圾箱
它有助于处理特殊情况,例如,如图所示,在末尾使用标点符号。但添加更多要排除的情况很容易。请参阅:
:
输出:这是一个“测试”字iss。不是一个“测试”。
这适用于提供的示例输入,但正如您所说,它只是一个示例。我认为,整个要求在于问题的标题:如何选择所有“
前后都没有空间吗?@mickmackusa你完全正确。一个好的、有效的答案在很大程度上取决于对问题的解释是否狭窄或开放。正则表达式标签通常倾向于狭窄(并且可以复制和粘贴)答案。这适用于提供的示例输入,但正如您所说,这只是一个示例。我认为,整个要求在于问题的标题:如何选择所有“
前后都没有空间吗?@mickmackusa你完全正确。一个好的、有效的答案在很大程度上取决于对问题的解释是否狭窄或开放。正则表达式标签通常倾向于狭窄(并且可以复制和粘贴)答案。您的解决方案不起作用,因为多个正则表达式匹配不能重叠。一旦它匹配了i,下一部分就是不匹配的s。请参阅示例:接近重复项:并且您的解决方案不起作用,因为多个正则表达式匹配不能重叠。一旦它匹配了i,下一部分就是例如,近乎复本:和花哨的名字,但我怀疑,即使@ CasimiRethiPultPoice使用这个方法。这也不起作用。@ ReVo我认为这个名字只是描述它做什么,但我不认为它是规范的。总是有边缘情况。这就是为什么我建议这种方法不是特定的。我在样例中展示的模式,例如标点符号不适用于阿努巴哈的建议。花哨的名字,但我怀疑,即使@ CasimiRethiPultPulter在这里使用这个方法。这也不起作用。@ ReVo我认为这个名字只是描述它做什么,但我不认为它是规范的。总是有边缘情况。这就是为什么我建议。is方法-不是我在示例中显示的特定模式,例如,标点符号案例不符合anubhava的建议。
this is a "test" word iss
\s"\S+"(\p{P}|\s)|(")
$re = '/(\s"\S+"(?:\p{P}|\s))|"/';
$str = 'this i"s a "test" word i"s"s. NOt a "test".';
$subst = '$1';
$result = preg_replace($re, $subst, $str);
echo $result;