2012-10-29 103 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'匹配所有空格,而不僅僅是空格(換行符和製表符)。 –