正则表达式:查找双引号之间的分号

时间:2018-11-12 14:43:36

标签: regex

我只是从正则表达式开始。我需要找到文本中的所有情况,双引号之间的字符串中有分号。所以我正在寻找类似的情况

"something;something"
"something ; something"
"something; something"
"something ;something"

我找到了在双引号之间查找字符串的代码:

(["'])(?:(?=(\\?))\2.)*?\1

您能帮我修改一下吗,以便发现上面提到的情况?

2 个答案:

答案 0 :(得分:1)

您可以使用negated character类,在其中可以添加不需要的内容。如果字符串中只能有1个分号,那么您也可以将其添加到字符类中,否则可以使用[^"\r\n]*来出现;

的地方。

"([^"\r\n;]*;[^";\r\n]*)"

那会匹配

  • "字面上匹配
  • (捕获组
    • [^"\r\n;]*匹配0+次,而不是",换行符或分号
    • ;字面上匹配
    • [^"\r\n;]*匹配0+次,而不是",换行符或分号
  • )关闭捕获组
  • "字面上匹配

您的值在第一个捕获组中。

Regex demo

如果您不希望仅在双引号之间使用分号,则可以使用负数提前查找:

(?!";")"([^"\r\n;]*;[^";\r\n]*)"

答案 1 :(得分:0)

<?php
$input = <<<INPUT
a
"something;something"
b
"something ; something"
c
"something; something"
d
"something ;something"
e
INPUT;

preg_match_all("/\"([^\"]+;[^\"]+)\"/im", $input, $m);

print_r($m);

/*
Array
(
    [0] => Array
        (
            [0] => "something;something"
            [1] => "something ; something"
            [2] => "something; something"
            [3] => "something ;something"
        )

    [1] => Array
        (
            [0] => something;something
            [1] => something ; something
            [2] => something; something
            [3] => something ;something
        )

)
*/
相关问题