我想用我的正则表达式/*{2}(.*)*/
/**
* <p>
* and writes file to {@link #writeToFile(String, java.util.Map) writeToFile} \\n
* ddddddddddddd
* </p>
* <p>bla bla</p>
*
* and get from class.
*
* @param filePath
* @param classes
* @return
* @throws Exception
*/
但它不匹配。我不知道我做错了什么。这就是我的阅读方式,找到\
后跟我的两个*
实例,然后匹配任何内容,直到找到*
后跟/
。
但它只匹配/**
其他一切都被忽略了。
答案 0 :(得分:3)
您需要通过在*
前面放置\
来逃避(.*)
。当它未被转义时,它将被解释为您的模式中使用的任意重复量词:/\*{2}(.*)\*/
转义后,您的模式应如下所示:
\\*
如果您的语言要求您在字符串中转义反斜杠,请确保将它们双重转义。在Java中,模式\*
表示正则表达式*
,它与*/
文字匹配。
请注意,要解析此评论语法,大多数语言都会停在第一个*
,这就是为什么通过附加{?
量词lazy可能会更好{1}}:
/\*{2}(.*?)\*/
这样,如果你运行正则表达式对抗例如/** foo bar */ */
,仅匹配foo bar
(不包括以下*/
,与greedy quantifier的情况相同。)
答案 1 :(得分:1)
答案 2 :(得分:0)
问题是。(Point)表示“除换行之外的任何字符”。 所以这里的这个将是你的解决方案:
/[\*]{2}(.*?\n)* \*/
如果您需要一个小组来查看该区块的信息,它将如下所示:
/[\*]{2}((?:.*?\n)*) \*/
答案 3 :(得分:0)
Rassmussen和Marius Schulz都是正确的。您需要加倍转义所有*
,例如\\*
,.
与换行符不匹配,例如\n
,\r
。
这是一个字符串,当作为正则表达式实现时,将匹配任何操作系统上的任何javadoc注释:
"/\\*\\*(?:.|\r?\n)*?\\*/"
在http://myregexp.com/signedJar.html
进行了测试阐释:
/
与文字字符\
匹配。\\*
与文字字符*
匹配。(?:.|\r?\n)
是一个非捕获组。
(?:
启动非捕获组。.
匹配除换行符之外的任何字符。|
相当于“或”。\r?\n
匹配任何操作系统上的换行符。在基于UNIX的操作系统上,\n
是换行符,但在Windows上,换行符为\r\n
。 ?
使上一项可选,因此\r?\n
将匹配\n
和 \r\n
。这使得正则表达式适用于任何操作系统。 )
结束非捕获组。*?
重复上一项(?:.|\r?\n)
,零次或多次,尽可能少次。\\*
与文字字符*
匹配。/
与文字字符\
匹配。根据您实施正则表达式的方式,您还可以使用Pattern
的{{1}}标记和正则表达式
DOTALL
例如:
/\*\*.*?\*/
使用带有public static Pattern compile(String regex, int flags)
标记的DOTALL
方法。