1

如果我想匹配以下内容:

slashdot               <-Hit

"    slashdot    "     <-Hit

"    slashdot          <-Hit

    slashdot    "      <-Hit

"slashdot"             <-Miss

(包括如果没有换行符)我将如何正则表达式?

我希望它可以让语音标记取消匹配,但前提是内容和语音标记之间绝对没有空格。

我在 stackoverflow 上找到了一些关于如何检测语音标记的示例

(?=(?:(?:[^"]*+"){2})*+[^"]*+\z) 

但是我在设置它们时遇到了麻烦,因此如果有任何空格,仍然会命中。

非常感谢所有帮助。(我是stackoverflow的新手,非常喜欢它!我正在努力为其他人回答尽可能多的问题,并学习我所听到的一切)


简单地说

slashdot - good
"slashdot" - bad
" slashdot " - good (as there are spaces)
4

1 回答 1

3

描述

这个正则表达式只会找到没有引号的行,或者引号在引号和它的有效负载之间有空格的地方。此表达式假定第一个非空格字符将是引号(如果存在)。如果第一个非空格字符不是开引号,则允许整行。

^\s*(?:[^"].*|"\s.*\s"?)\s*(?:$|\r|\n|\Z)

在此处输入图像描述

PHP 代码示例:

输入字符串

slashdot           
"    slashdot    " 
"    multiline 1 slashdot     
    line 2 slashdot    " 
"slashdot bad"        
     "    leading spaces and trailing spaces    " 

代码

<?php
$sourcestring="your source string";
preg_match_all('/^(?:[^"].*|"\s[^"]*\s")/imx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

火柴

$matches Array:
(
    [0] => Array
        (
        [0] => slashdot           
        [1] => "    slashdot    " 
        [2] => "    multiline 1 slashdot     
        [3] =>     line 2 slashdot    " 
        [4] =>      "    leading spaces and trailing spaces    " 
         )

)
于 2013-06-25T04:55:04.410 回答