2012-10-29 76 views
3

请考虑下面的文字:解决以下的正则表达式

String tempStr = 
      "$#<div style=\"text-align:left;\">$#Order-CAS No#$</div>$#abc#$"; 

    Pattern p = Pattern.compile("(?<=\\$#)(\\w*)(?=#\\$)"); 
    Matcher m = p.matcher(tempStr); 

    List<String> tokens = new ArrayList<String>(); 
    while (m.find()) { 
     System.out.println("Found a " + m.group() + "."); 

,但它给我只是想abc..i回答,因为订单CASNO和ABC。

回答

4

表达式\\w*与连字符或空格不匹配。改为尝试[\\w\\s-]*

Pattern p = Pattern.compile("(?<=\\$#)([\\w\\s-]*)(?=#\\$)"); 

了解更多关于此字符类:

+0

感谢Mark..but如果我写“Order-CAS No”...它没有给出相应的答案。它不支持space.I是新的正则表达式。所以请告诉支持空间。 – rahul

+0

@rahul。然后在字符类中添加一个空格: - [[\\ w \\ s - ] *' –

+1

@rahul,请自己帮忙并阅读[正则表达式教程](www.regular-expressions.info/tutorial.html )。你可以简单地将你想要的任何字符加入到字符组中(输入''[...]')。所以只要做'[\\ w - ]'。但我想你很快会想出更多的字符来匹配;) –

0

最后得到了解决。

Pattern p = Pattern.compile("(?<=\\$#)([\\w-\\s\\w]*)(?=#\\$)"); 
+2

匹配第二个'角色类中的\\ w'不会执行任何操作。另外,我建议把'-'最后放在角色类中。否则,如果您在其周围添加单个字符,则会出现问题。另外请注意,'\\ s'匹配所有空格,而不仅仅是空格(换行符和制表符)。 –