java - 带反斜杠转义的字符串的正则表达式

标签 java regex

我试图想出一种模式来查找 Java 源代码中双引号或单引号之间的每个文本。这是我的:

"(.*?)"|’(.*?)’

Debuggex Demo

这几乎适用于我猜的所有情况,除了一个:

"text\"moretext\"evenmore"

Debuggex Demo

这可以用作有效的字符串定义,因为引号被转义了。该模式无法识别更多文本的内部部分。

对解释这种情况的模式有什么想法吗?

最佳答案

您可以使用此正则表达式匹配单引号或双引号字符串,忽略所有转义引号:

(["'])([^\\]*?(?:\\.[^\\]*?)*)\1

RegEx Demo

正则表达式分解:

  • (["']):匹配单引号或双引号并将其捕获到组#1
  • (: 开始捕获第 2 组
    • [^\\]*?:匹配 0 个或多个不是 \
    • 的字符
    • (?:`: 启动非捕获组
      • \\:匹配一个\
      • .:后跟任何被转义的字符
      • [^\\]*?:后跟 0 个或多个非 \ 字符
    • )*:结束非捕获组。匹配 0 个或多个这个非捕获组
  • ):结束捕获组 #2
  • \1:匹配组 #1 中结束的单引号或双引号匹配

关于java - 带反斜杠转义的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45521098/

相关文章:

java - 认证前检查Spring-Security中的X509证书吊销状态

sql - PL/SQL 正则表达式检查

java - 在字符串上使用子字符串的替代方法

java - Docx4j企业版是否用java更新Word .docx文件的目录?

python - 如何在不使用单独的替换函数的情况下循环正则表达式匹配并进行替换?

java - 使用正则表达式搜索 HashSet

javascript - 正则表达式多次替换组

c++ - 使用 boost 绑定(bind)到仅采用一个参数的方法来 boost 自定义格式化程序

java - 在 AWS EC2 实例上从 JAVA 运行 Bash 命令

java - Spring数据加入多张表