My text "can contain" both single 'and double"' quotes. The quotes "can also be 'nested" as you can see.
((包含3个项目的数组)
can contain
and double"
can also be 'nested
我不是正规表达式专家,离它远。我仍然设法使双引号之间的文本,例如I can "grab this" text
。
preg_match_all("~\"(.*?)\"~", $text, $between);
print_r($between);
This is "A text"
(A文本)This is 'A text'
(A文本)This is "A 'text"
(A'文本)This is 'A "text'
(A文本)This is "A text
(引用不均1)This is 'A text
(引用不均1)This is "A "text"
(引用不均3)This is 'A 'text'
(引用不均3)This "is ' A " text'
(相交)This "has "one wrong" quote
),就可以了我的猜测是每个字符都需要循环和检查。如果以"
开头,则需要将字符移至下一个"
以便将其换行。然后,我想需要从该位置重置该字符以查看下一个引号类型以及再次,直到字符串结束。
此答案对不是适用于我的问题:regex match text in either single or double quote
可以在此处看到证明:https://regex101.com/r/OVdomu/65/
您可以使用
if (preg_match_all('~(?|"([^"]*)"|\'([^\']*)\')~', $txt, $matches)) {
print_r($matches[1]);
}
请参见regex demo和PHP demo。
也支持转义引号的变体:
'~(?|"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\')~s'
请参见this regex demo。
(?|"([^"]*)"|\'([^\']*)\')
是与branch reset group匹配的"
,然后与"
以外的任何0+字符匹配,然后与"
或'
匹配,然后与'
以外的任何0+字符匹配,并且然后单击'
,同时将匹配的引号之间的所有内容都捕获到组1中。