2012-02-21 137 views
1

不應該將SPAN標記放在電話號碼之外,不要放在裏面嗎?Java正則表達式:替換電話號碼(包括可選的括號)

String aParagraph = "start 201-555-1212 more (301)-777-1212 again (401) 888-1212 end"; 
String phoneRegEx = "\\b(\\(?[1-9]{1}[0-9]{2}\\)?[- ]?[1-9]{1}[0-9]{2}-[0-9]{4})\\b"; 
String replaceWith = "<span>$1</span>"; 

aParagraph = aParagraph.replaceAll(phoneRegEx , replaceWith); 
+0

第一組是外部的一個,對嗎? – Alfabravo 2012-02-21 01:27:09

回答

1

字邊界\b匹配\w+的邊界。你可以刪除它們:

String aParagraph = "start 201-555-1212 more (301)-777-1212 again (401) 888-1212 end"; 
String phoneRegEx = "(\\(?[1-9]{1}[0-9]{2}\\)?[- ]?[1-9]{1}[0-9]{2}-[0-9]{4})"; 
String replaceWith = "<span>$1</span>"; 

aParagraph = aParagraph.replaceAll(phoneRegEx, replaceWith); 
+0

它工作正常,沒有\ b。但我認爲我* HAD TO *有2 \ b標記,以確保它避免匹配「this201-555-1212那」。沒有?當* DO *時,我需要2 \ b標記? – Carol 2012-02-21 02:00:44

+0

@Carol:想一想,我從來沒有必要在正則表達式中使用'\ b'。但在這種情況下,你是安全的; '[1-9]'與's'不匹配(在'this'的末尾)。 – Ryan 2012-02-21 02:11:05

0

問題是使用\b。它認爲第一個數字是字邊界的開始,而不是(。因此,它實際上是匹配:

301)-777-1212 

而且不

(301)-777-1212 

,你打算。

相關問題