2014-10-01 2 views
0

У меня есть строка, которую я хочу заменить в файле, когда я вижу hostName=some_word Я хочу заменить его на some_other_word, но ядро ​​отрицательного lookbehind с нулевой шириной, которое я использую, похоже, не работает в Java-коде, несмотря на работу, когда я тестировал его онлайн-тестер регулярных выражений.Почему это регулярное выражение не работает?

line = "hostName=testing" 
Pattern host = Pattern.compile("(?<=hostName=).*"); 
Matcher match = host.matcher(line); 
hostName = match.group(); //illegal state exception 
line.replace(hostName,"new_name"); 

Я попробовал, что регулярное выражение на строку в Интернете, и это, казалось, работало хорошо:

ссылка: http://ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/#!;t=hostName%3Dtesting&r=(%3F%3C%3DhostName%3D).*&x=new_name

ответ

1

Вам нужно вызвать matcher.find() (матч в рамках ввода) или matcher.matches() (весь ввод) перед вызовом matcher.group().

Как правило, в состоянии if (или цикл while, если выполняется итерация по спичкам).

См API для Matcher.group():

Броски:

IllegalStateException - Если совпадение еще не было предпринято, или если операция предыдущий матч не удалось

+0

Хорошо, да это это определенно проблема! Раздражает то, что в java-документах ничего не говорится о запуске команды find() перед группировкой – sreya

+1

@sreya они ** делают **: D см. В моем ответе. – Mena

+1

Да, я идиот – sreya

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