2012-02-21 11 views
1

SPANマーカーを電話番号の外に置かないでください。Java RegEx:電話番号の交換(オプションのカッコを含む)

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

答えて

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がなければ正常に動作します。しかし、私は "this201-555-1212that"とのマッチングを避けるために2 * bのマーカーを持っていなければならないと思っていました。いいえ? * 2 * bマーカーが必要な場合は? – Carol

+0

@Carol:考えてみると、正規表現で '\ b'を使う必要はありませんでした。しかし、この場合、あなたは安全です。 '[1-9]'は 's'とマッチしません(' this'の終わりに)。 – Ryan

0

問題は、\bの使用です。最初の数字は単語境界の始まりとみなされ、(ではありません。だから、実際にマッチングされています

301)-777-1212 

そしてない

(301)-777-1212 

をあなたが意図したとおり。

関連する問題