繁体   English   中英

如何在正则表达式中处理'和'字符?

[英]How to deal with ' and " characters in regex?

我正在尝试使用此正则表达式匹配某些短语

String k = "{'hello','hi'}";
Pattern pattern = Pattern.compile("(\\{)(((([A-Za-z0-9_()\'\"\\.\\+\\-\\*/])+((,)?([A-Za-z0-9_()\\+\\-\\*/]))*)|(\\w)))?(\\})");


Matcher match = pattern.matcher(k);
System.out.println(match.matches());

它与我指定的所有字符都可以正常工作,这意味着它与{1,2}{1+3,method()}匹配,依此类推……等等……只有当我得到带有" char或'类的字符串"{"hello","hi"}"里面的正则表达式似乎无法识别此字符。

有没有一种特殊的方法来捕捉它们?

您可以使用\\例如\\'='和\\“ =”来转义字符

我宁愿使用[^}]和[^,],这将获取除该特定字符以外的所有内容。

我认为问题可能出在您的正则表达式上,而不是具体的'和'字符。包含更多字段的第二个块缺少几个字符(特别是'和“字符),因此没有捕捉到'hi'有效。 您正在正确处理这些字符,方法是在它们前面加上一个“ \\”以使它们转义(给您\\'和\\“)。

我已经用您的示例({'hello','hi'})测试了以下正则表达式,它可以正确提取文本。

({)(((([A-Za-z0-9_()\'\"\\.\\+\\-\\*/])+((,)?([A-Za-z0-9_()\'\"\\.\\+\\-\\*/]))*)|(\\w)))?(})

如果您需要有关正则表达式的任何帮助,或者想要一种更简便的方法来测试和调试正则表达式,建议您使用网站Regexr 这是一个出色的可视化工具,可在您对正则表达式进行任何操作时使用。 我使用此工具检查了您的初始正则表达式,以查找未拾取正则表达式的哪一部分,然后解决该问题。

如果您一直试图在花括号中插入元组,则可以将正则表达式简化很多:

String k = "{'hello','hi'}";
Pattern pattern = Pattern.compile("\\{(.*),(.*)\\}");
Matcher match = pattern.matcher(k);
System.out.println(match.matches());
System.out.println(match.group(1));
System.out.println(match.group(2));

印刷品:

true
'hello'
'hi'

另外,由于Java的正则表达式解析器可能认识到前导'{'和尾随'}'不是正则表达式间隔说明符的一部分,因此不会将它们视为元字符。 因此,可以删除您的反斜杠,并将正则表达式修整为:

Pattern pattern = Pattern.compile("{(.*),(.*)}");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM