`
pcpig
  • 浏览: 88280 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

正则表达式学习

 
阅读更多
   前一段时间看了一下html解析,发现这个网站(http://htmlparser.sourceforge.net/)还不错,
   推荐给大家。有需求的同学,可以自个儿深研一番,当然如果有更好的也别忘了推荐给我。:-)
  
   另外我还看了一下java中的正则表达式,发现正则强大是很强大就是掌握起来太麻烦了。
   比如在java中“\” 本身就是一个转义符, 所以要表示一个'\',则必须在其前面再加一个'\',
   eg.
String s0 = "good\\nafternoon";
System.out.println(s0);
s0 = s0.replaceAll("\\\\n","\n");
System.out.println(s0);
  同时因为'\'是转义字符,是特殊字符,所以在替换的时候你不能直接使用它,
  eg.
String s = "\\\\";
s = s.repacleAll("\\\\\\\\","\\\\")
//s = s.replaceAll("\\\\\\\\","\\");  -- is wrong
System.out.println(s);
  为了将两个'\'换成一个'\',写了如此多的'\',是不是太麻烦了点。 :-(

  另外,在Jdk文档中对于Greedy quantifiers ,Reluctant quantifiers ,Possessive quantifiers 的解释
  基本一样,从字面上是很难看出区别的,下面通过一个例子来说明三者之间的异同。
  --------------------------------(以下内容来自网上资料,并通过本机实践证明)-----------------------------
Greedy quantifiers
字串 "xfooxxxxxxfoo"
pattern ".*foo"
結果 xfooxxxxxxfoo
Greedy字面翻譯是貪婪,也就是盡可能的取字串,其實最貪婪的是第三種方法,因為Greedy還會把之後相符的資料留下來,Possessive吃的連骨頭都不剩。

Reluctant quantifiers
字串 "xfooxxxxxxfoo"
pattern ".*?foo"
結果 xfoo 和 xxxxxxfoo
Reluctant字面翻譯是勉強,也就是抓最小可能,像這個例子,第一次抓一個x之後發現後面和foo相符,就得第一個結果,然後一直到最後又得到第二個結果。

Possessive quantifiers
字串 "xfooxxxxxxfoo"
pattern ".*+foo"
結果 沒有相符合資料,因為所有的資料都與"."比較相符,最後沒有剩下的字串可以和foo做比較,所以沒有符合資料。

------------------------------------------------------------------------------------------------------
附上我写的验证代码:

//String pattern1 = ".*foo";
String pattern1 = ".*?foo";
//String pattern1 = ".*+foo";
Pattern patt1 = Pattern.compile(pattern1);

String input1 = "xfooxxxxxxfoo";

Matcher matcher1 = patt1.matcher(input1);

while (matcher1.find())
{
System.out.printf("Found '%s' at (%d,%d)%n",
  matcher1.group(), matcher1.start(),
  matcher1.end());
}




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics