2015-06-14 2 views
1

Я хотел бы использовать string.replaceAll() для замены всех последовательностей символов , начинающихся с '@', '$' или ':' и , заканчивающихся на ' '(пробел). До сих пор у меня есть это:Java replaceAll() заменяет только один экземпляр.

string = string.replaceAll("[@:$]+.*?(?=)", "ZZZZ"); 

Однако регулярное выражение используется только заменяет первый экземпляр, который отвечает указанным выше критериям. Таким образом, учитывая строку:

"SELECT title FROM Name WHERE nickname = :nickname AND givenName = @givenName AND familyName = $familyName" 

ток (неправильный) вывод:

"SELECT title FROM Name WHERE nickname = ZZZZ AND givenName = @givenName AND familyName = $familyName" 

Желаемый результат:

"SELECT title FROM Name WHERE nickname = ZZZZ AND givenName = ZZZZ AND familyName = ZZZZ" 

Как я могу изменить регулярное выражение для получения желаемых результатов?

+4

[Это не выход, который я получаю.] (Http://ideone.com/SmCYgl) –

+4

Кроме того, '[...] $ familyName" 'не заканчивается пробелом. –

+0

Ах, похоже, имя семейства не заканчивая пробелом, это ошибка, в конце концов, хорошая сметка. Любая идея, как настроить регулярное выражение, чтобы поменять имя семейства, когда после него нет места? –

ответ

1

Как уже упоминалось вы можете использовать следующее заявление:

string = string.replaceAll("[@:$]+[^ ]*", "ZZZZ"); 

[^...] соответствует всем признакам, за исключением тех, за которыми следуют ^.

Возможные применения: обработка

  1. один раз файлов человека написана (необходимо контролировать результаты, могут быть строки, содержащие @:$

  2. Возможно изменение какой-то вывод отладки, поэтому он может быть выполнен в СУБД

Это может быть безопаснее ограничиться чем-то вроде [a-zA-Z0-9_.]* вместо [^ ]*.

+1

Кстати, если вам нужно, чтобы обрабатывать файлы, вы также могли бы использовать расширенный текстовый редактор, например editPlus, ввести регулярное выражение и быстро щелкнуть по замене, чтобы иметь надзор. – maraca

+0

Работает! Спасибо bunc h sir. Я также ценю дополнительную информацию. –

2

Если вы хотите, чтобы удалить слова, начинающиеся с этих символов, то вы можете использовать этот код:

string = string.replaceAll("[@:$]+\\w+", "ZZZZ"); 

Working demo

enter image description here