java正则表达式,匹配星号的问题


折腾好久了, 这个正则匹配星号一直有问题,不知道原因,目的是匹配行首以“*”开头的“*”,并替换为“ *”。

   
  String content = "/****\n" +
  
"* \n" +
"* \n" +
"*/ \n ";
// 这样是可以匹替换*"的
content = Pattern.compile("^/\\*").matcher(content).replaceAll(" /*");
// 但是,这样匹配却匹配不到。。
content = Pattern.compile("^\\*").matcher(content).replaceAll(" *");


实在没有想通是怎么回事,"^/\\*" 和"^\\*" 本身不都一样吗 ? 为什么得不到想要的结果呢?
希望各位指点,在下不甚感激。
ps:(在这里贴上星号和反斜杠还要重新转义次, 晕。。。。)
ps2:(原来代码里面的是不用转义的。。 提问的时候预览有问题,请管理员注意下这个问题。谢谢)

==============================
找到解决方法了。。。这里设置一个complie的模式即可

   
  /// 设置成mutiline匹配替换成功!
  
content = Pattern.compile("^\\*", Pattern.MULTILINE).matcher(content).replaceAll(" *");

不过依然不解。在没有设置flag的时候,为什么前一个匹配能够成功??

java 正则表达式

Easter 11 years, 5 months ago

你需要理解一下正则里Pattern.MULTILINE的含义.

简单的说, 现在有string为 "abc\nafg", 正则"^a"
如果不是Pattern.MULTILINE, "^"匹配字符串的开头; 我们的例子可以匹配一次(1个a).
如果是Pattern.MULTILINE, "^"匹配字符串的开头和新行的开头;我们的例子匹配两次(2个a都匹配).

囊达扩类哇 answered 11 years, 5 months ago

Your Answer