我有两个正则表达式字符串:
-
[^'"0-9+\-%*\/<>\!=&|]
-
(['"])(?:\\\1|.)*?\1
第一个找到除列出的字符之外的任何内容。 第二个找到引号之间的任何内容,包括引号。
我想合并这些,以便找到与引号之间的这些字符或字符组匹配的任何内容,排除找到的匹配项,并返回其他所有内容。例如,在以下短语中,我希望它仅返回粗体字符。
Hello world "This is a test"
"Another test" 5 x 4
'And this has an escaped quote don\'t in it ' Blue Boy
"This has a single quote ' but doesn't end the quote as it started with double quotes"
hello
28 + 2 / 10 * 3 abc
" Lorem ipsum dolor\" sit 'amet' "
这可能吗?任何帮助将不胜感激。
最佳答案
您可以使用 PCRE 模式,例如
(?:(['"])(?:\\\1|.)*?\1|\d+(?:\s*[*\/+x-]\s*\d+)*)(*SKIP)(*F)|(?=\S)[^'"0-9+\-%*\/<>\!=&|]+
请参阅regex demo
详细信息
-
(?:(['"])(?:\\\1|.)*?\1|\d+(?:\s*[*\/+x-]\s*\d+)*)(*SKIP)(*F)
-"
之间的子字符串或'
字符或 1+ 位数字后跟 0 次或多次出现/
,+
,-
,*
或x
用 0+ 空格和 1+ 数字括起来,匹配将被丢弃,并从失败的位置搜索下一个匹配 -
|
-
(?=\S)
- 下一个字符必须是非空白字符 -
[^'"0-9+\-%*\/<>\!=&|]+
- 除否定字符类中指定的字符外的 1 个或多个字符。
关于REGEX 组合正则表达式字符串,然后查找除匹配项之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63290979/