[英]How to match regex with dollar amounts and phrases in Java?
我有這個正則表達式
Pattern pa = Pattern.compile("\\b(\\$|hello|world|foo|blah blargh)\\b");
Matcher m = pa.matcher("$");
boolean b = m.matches();
System.out.println(b);
這打印出錯誤,但我不知道為什么。
為什么?
https://coderpad.io/GWFMKYQQ --> coderpad 如果有幫助的話。
重點是\\b
詞邊界是不明確的:當它出現在一個詞字符(即字母、數字或下划線)之后時,下一個字符必須是非詞或字符串的結尾。 當\\b
站在一個非單詞字符之后時,它需要一個單詞字符出現在它之后,也不包括字符串的結尾。
因此,如果您的意圖是僅在$
未包含單詞字符時才匹配它,請使用明確的(?<!\\w)
和(?!\\w)
環顧四周:
Pattern pa = Pattern.compile("(?<!\\w)(\\$|hello|world|foo|blah blargh)(?!\\w)")
如果$
前面有一個單詞字符, (?<!\\w)
將使匹配失敗,如果$
后面是一個單詞字符,則(?!\\w)
負向前瞻將使匹配失敗。
注意:如果您添加(?U)
(或Pattern.UNICODE_CHARACTER_CLASS
標志), \\w
和\\b
將成為 Unicode 感知(在某些情況下可能很重要)。
我對此進行了一些研究,結果證明\\b
元字符不喜歡美元符號。 您可以使用以下正則表達式在空格后匹配美元符號:
Pattern.compile("(\\s|^)\\$")
並用另一個正則表達式修剪掉前面的空格:
Pattern.compile("\\S+")
或者,由於這是 Java,而不是 JavaScript 的垃圾正則表達式引擎,因此您可以使用以下命令:
Pattern.compile("(?<=\\s)\\$")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.