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;