我试图想出一种模式来查找 Java 源代码中双引号或单引号之间的每个文本。这是我的:
"(.*?)"|’(.*?)’
这几乎适用于我猜的所有情况,除了一个:
"text\"moretext\"evenmore"
这可以用作有效的字符串定义,因为引号被转义了。该模式无法识别更多文本的内部部分。
对解释这种情况的模式有什么想法吗?
最佳答案
您可以使用此正则表达式匹配单引号或双引号字符串,忽略所有转义引号:
(["'])([^\\]*?(?:\\.[^\\]*?)*)\1
正则表达式分解:
(["'])
:匹配单引号或双引号并将其捕获到组#1(
: 开始捕获第 2 组[^\\]*?
:匹配 0 个或多个不是\
的字符
- (?:`: 启动非捕获组
\\
:匹配一个\
.
:后跟任何被转义的字符[^\\]*?
:后跟 0 个或多个非\
字符
)*
:结束非捕获组。匹配 0 个或多个这个非捕获组
)
:结束捕获组 #2\1
:匹配组 #1 中结束的单引号或双引号匹配
关于java - 带反斜杠转义的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45521098/