使用单反斜杠存储模式的便捷方式会很棒。一些解决方法:将其存储在文件中并使用NIO进行读取。缺点:Java EE不允许IO访问。以某种方式存储在JNDI中。也许java 5 Pattern.LITERAL
标志的新手可以帮忙吗?我想使用普通模式字符串,例如\d
,而不是\\d
。
答案 0 :(得分:6)
问题是\
在创建String时是java中的特殊字符,无论是否正则表达式。
例如String s = "\t";
你不能将它用于任意字符,String s = "\a";
会给你一个编译时错误。有效字符是b,t,n,f,r,“,”和\
因此,要在java中的字符串中获取文字\
,您需要将其转义为:\\
。因此,您的 only 选项是在java文件中没有这些字符串,因此在您的java文件加载的外部文件中。 Pattern.LITERAL
根本不会有用,因为你仍然需要一个有效的java字符串,\d
不是。
答案 1 :(得分:1)
如果您有兴趣从文件中读取表达式,请考虑将文件打包在jar中,并使用Class.getResourceAsStream(...)
。 AFAIK,在Java EE中仍然允许使用。
答案 2 :(得分:0)
如果你只是在Java工作,我的建议是不要为此烦恼。只需存储正则表达式,因为Java可以理解它们,即烦人的双\
。
IF并且仅在您想要存储正则表达式以将它们用作不同语言的文件输入时,然后使用标准正则表达式表示法创建文本文件。但是你必须创建某种类,通过char读取使用char,并在将它们添加到要在模式匹配器上使用的字符串之前处理转义字符本身。
它做了很多工作,(实际上并不是很多,但如果它不是一个挑剔的那个该死的)但你只需要做一次,你可以扩展它用于多种语言,这将是一个很好的学习在我看来经验。做错了,你会经常调试这个小混蛋。
可能是一个很好的,如果不是重要的Java添加,一些有点标志,允许文件从文件直接读取作为正则表达式标准字符串,将自己进行必要的更改。我必须检查是否有人建议使用此功能。
PS:刚刚注意到你必须逃离\
以使其可见......这很奇怪......