簡體   English   中英

如何將正則表達式與 Java 中的美元金額和短語匹配?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM