如何找到包含转义字符的正则表达式?

时间:2013-10-15 15:49:57

标签: java regex

我有以下文字(字符串): System.out.println(text)

..............
BLOOMINGTON, IL  61710
Page 4 of 5
8/2/2009file://C:\hjO Fhjes\hShjort_2012w211231_0323212_575.htm
Location: EAST JEFRYN, NY
..............

我需要摆脱以单词"Page"开头并以".htm"

结尾的任何子字符串

我尝试了以下内容:

      Pattern patternP = Pattern.compile("(?:Page.*?)(\\n+)+htm", Pattern.DOTALL);
      Matcher matcherP = patternP.matcher(filtered);
      matcherP.find();
      String page = matcherP.group();
      text = text.replace(page, "");

但这不会过滤,我认为是因为转义字符。我该如何改进呢?

2 个答案:

答案 0 :(得分:1)

不,这是因为你的正则表达式错了。试试这个正则表达式:

Pattern.compile("Page(.+?)\\.htm", Pattern.DOTALL);

您只需拨打String#replaceFirst即可在一次通话中执行此操作:

String repl = filtered.replaceFirst("(?s)Page(.+?)\\.htm", "");

(?s)充当Pattern.DOTALL

的位置

答案 1 :(得分:1)

您的正则表达式不允许\nhtm之间的任何内容。你可能想把它改成

"(?:Page.*?)(\n+).+htm"

注意我只使用1 \来逃避换行符。那是因为\n是一个java转义序列,你只需要使用2 \作为\\d

等正则表达式转义序列

*您可能需要确保您的正则表达式实现支持这样的换行符。