Java Regexp模式有双反斜杠,如何以可读格式存储模式

用单反斜杠存储模式的便捷方式会很棒。 一些解决方法:将其存储在文件中并使用NIO进行读取。 缺点:Java EE不允许IO访问。 以某种方式存储在JNDI中。 也许java 5 Pattern.LITERAL标志的新手可以帮忙吗? 我想使用普通的模式字符串,比如\d ,而不是\\d

麻烦的是\在创建String时java是一个特殊的char,无论是否正则表达式。

例如String s = "\t";

你不能将它用于任意字符, String s = "\a"; 会给你一个编译时错误。 有效字符是b,t,n,f,r,“,”和\

因此,要在java中的字符串中获取文字\ ,您需要像这样转义它: \\ 。 因此,你唯一的选择是在java文件中没有这些字符串,因此在你的java文件加载的外部文件中。 Pattern.LITERAL根本Pattern.LITERAL ,因为你仍然需要一个有效的java字符串,而不是。

如果你只是在Java工作,我建议不要为此烦恼。 只需存储正则表达式,因为Java可以理解它们,即烦人的双\

IF和ONLY如果您想存储正则表达式以将它们用作不同语言的文件输入,则使用标准正则表达式表示法创建文本文件。 但是你必须创建某种类,它将通过char读取使用char,并在将它们添加到要在模式匹配器上使用的字符串之前处理转义字符本身。

它做了很多工作,(实际上并不是很多,但如果它不是一个挑剔的那个该死的)但是你只需要做一次,并且你可以扩展它用于多种语言,这将是一个很好的学习经验意见。 做错了,你会遭受很多调试这个小混蛋。

可能是一个很好的,如果不是重要的Java添加,一些有点标志,允许文件从文件直接读取作为正则表达式标准字符串,将自己进行必要的更改。 我必须检查是否有人建议使用此function。

PS:刚刚注意到你必须逃离\才能让它可见……这很奇怪……

如果您有兴趣从文件中读取表达式,请考虑将文件打包在jar中,并使用Class.getResourceAsStream(...) 。 AFAIK,在Java EE中仍然允许使用。