(?:'.*?')
匹配单引号内的文字。我想匹配不在引号内的文本字符串。 [^(?:'.*?')]
不适用于我:它匹配每个不是单引号的字符。如何更改它以匹配不在引号内的文本?
答案 0 :(得分:1)
您可以使用preg_replace
将所有带引号的文字替换为空字符串,以获取引号外的所有文本(假设引号均衡并且未转义):
$s = "abc '123' foo";
$r = preg_replace("/'[^']*'/", "", $s);
//=> "abc foo"
答案 1 :(得分:0)
我不知道您的操作的目的,但您可以将字符串转换为Char数组并匹配Unicode代码。
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为通用方法是循环匹配和连接每个组1的值
不需要\G
锚,因为字符是引用或不引用。
# (?:(?:'[^']*')+|((?:[^']+|'(?![^']*'))+))
(?:
(?:
' [^']* '
)+
|
( # (1 start)
(?:
[^']+ # not '
|
' # or, ' not followed by another '
(?! [^']* ' )
)+
) # (1 end)
)