2013-07-04 4 views
0

У меня есть несколько html-кодов, сохраненных в файле. Я хочу заменить все тексты, соответствующие этому шаблону: @@[\w]{1,}@@. но почему этот шаблон в моем java-коде не работает? мой шаблон неправильный?шаблон регулярного выражения не соответствует

String line = "\t<title>@@[email protected]@</title>"; 

if(line.matches("@@[email protected]@")) { 
    line = line.replaceAll("@@[email protected]@", "Title"); 
} 
+0

Адвокат: не анализируйте HTML с регулярными выражениями. Используйте HTML-парсеры. – m0skit0

ответ

3
line.matches("@@[email protected]@") 

означает, что вся линия соответствует. Представьте себе, как этот

line.matches("^@@[email protected]@$") 

И replaceAll не будет бросать исключение, если совпадения нет, так что вы можете просто удалить чек:

String line = "\t<title>@@[email protected]@</title>"; 
line = line.replaceAll("@@[email protected]@", "Title"); 
+0

Как предотвратить сравнение рисунка со всей строкой? –

+1

@ user88731 Используйте пакет 'java.util.regex'. – johnchen902

+0

thanx исправил мою проблему :) –

1

В Java String#matches только возвращает истину, если целом строка соответствует регулярному выражению. В вашем случае вы хотите это регулярное выражение: .*@@[email protected]@.*.

Я думаю, что String#contains лучше для вашего случая, так как вы действительно не хотите соответствовать регулярному выражению, но подстроке.

Смежные вопросы