Java Regex 用于将带引号的字符串与转义引号匹配

Posted

技术标签:

【中文标题】Java Regex 用于将带引号的字符串与转义引号匹配【英文标题】:Java Regex for matching quoted string with escaped quotes 【发布时间】:2011-01-30 17:10:46 【问题描述】:

我知道已经有很多类似我的问题,但我没有找到适用于 Java 的答案。所以我写了一个新问题。

我有如下内容的文本文件:

key1 = "这是一个 \"test\" 文本,使用 '\\' 字符进行转义"; key2 = '它必须与\'单\'引号和“双”引号一起使用';

我需要一个与双引号(或单引号)中的值匹配的正则表达式。此正则表达式必须支持转义引号和转义反斜杠。 正则表达式必须与 Java 标准 Pattern/Matcher 类一起使用。

【问题讨论】:

密切相关,可能有用:***.com/questions/263985/… 【参考方案1】:

试试这个正则表达式:

'([^\\']+|\\([btnfr"'\\]|[0-3]?[0-7]1,2|u[0-9a-fA-F]4))*'|"([^\\"]+|\\([btnfr"'\\]|[0-3]?[0-7]1,2|u[0-9a-fA-F]4))*"

作为字符串文字:

"'([^\\\\']+|\\\\([btnfr\"'\\\\]|[0-3]?[0-7]1,2|u[0-9a-fA-F]4))*'|\"([^\\\\\"]+|\\\\([btnfr\"'\\\\]|[0-3]?[0-7]1,2|u[0-9a-fA-F]4))*\""

【讨论】:

Crikey,这是一个正则表达式半。你是刚想出来的,还是你已经使用了一段时间的东西? (例如,您认为它的测试效果如何?) @OP:这看起来像是为处理 Java 字符串和类似字符串而量身定制的(例如,它处理像 \u1234 这样的 Unicode 转义,以及通常的 Java \f\t 等)。只是提到它以防您的源数据与此略有不同,因为您实际上并没有说字符串是 Java 样式的,只是它们可能有反斜杠转义的引号和反斜杠。事实上,在我看来,你的字符串是 javascript(它的语法与 Java 字符串几乎相同,所以你可能没问题)。 是的,字符串是 JavaScript。但我用 Java 解析它们。

以上是关于Java Regex 用于将带引号的字符串与转义引号匹配的主要内容,如果未能解决你的问题,请参考以下文章

Java Regex:查找带转义的单引号文本

Java - '\' 未用于转义字符串中的双引号“

将带引号的字符串传递给 system() 保持引号不变

使用正则表达式转义单引号字符串中的所有双引号 [重复]

RegEx SQL,发出转义引号

怎么将带特殊字符的字符串存入sqlserver的某个字段