我只是从正则表达式开始。我需要找到文本中的所有情况,双引号之间的字符串中有分号。所以我正在寻找类似的情况
"something;something"
"something ; something"
"something; something"
"something ;something"
我找到了在双引号之间查找字符串的代码:
(["'])(?:(?=(\\?))\2.)*?\1
您能帮我修改一下吗,以便发现上面提到的情况?
答案 0 :(得分:1)
您可以使用negated character类,在其中可以添加不需要的内容。如果字符串中只能有1个分号,那么您也可以将其添加到字符类中,否则可以使用[^"\r\n]*
来出现;
"([^"\r\n;]*;[^";\r\n]*)"
那会匹配
"
字面上匹配(
捕获组
[^"\r\n;]*
匹配0+次,而不是"
,换行符或分号;
字面上匹配[^"\r\n;]*
匹配0+次,而不是"
,换行符或分号)
关闭捕获组"
字面上匹配您的值在第一个捕获组中。
如果您不希望仅在双引号之间使用分号,则可以使用负数提前查找:
(?!";")"([^"\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
)
)
*/