2015-05-20 4 views
2

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

Regex У меня есть: ActivityState\s\s*(\w+).*new ActivityState\s*\(\"(\w+)

текстовая строка:

public ActivityState StartState = new ActivityState("start"); 
public ActivityState ThisState = new ActivityState("this"); 
public ActivityState IsState = new ActivityState("is"); 
public ActivityState AState = new ActivityState("a"); 
public ActivityState TestState = new ActivityState("test"); 

Желаемая выход:

StartState state 

ThisState state 

IsState is 

AState a 

TestState test 
+3

какой язык вы используете? –

+0

@ Andie2302 - он разбирает исходный код Java, не означает, что он такой же, как синтаксический анализатор –

ответ

1

Для общего случая, вы можете добавить/г флаг в конце вашего regex:

ActivityState\s\s*(\w+).*new ActivityState\s*\(\"(\w+)/g 

/g означает глобальный, и это означает, что он не будет останавливаться при первом совпадении.

См Demo

В зависимости от языка программирования это может быть также достигнуто несколькими различными способами, при этом большинство языков, имеющих такое поведение, построенный в свои функции. Например, в python, если вы вызываете re.findall (шаблон, текст), у вас одинаковое поведение без необходимости указывать флаг/g в шаблоне.

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