2013-07-06 2 views
4

Я новый с помощью регулярных выражений, у меня есть строки какMultiline регулярное выражение

ELEMENTS'"MCMCU","MCSTYL","MCDC","MCLDM","MCCO","MCAN8","MCAN8O","MCCNTY","MCADDS","MCFMOD","MCDL01","MCDL02","MCDL03","MCDL04","MCRP01","MCRP02","MCRP03","MCRP04","MCRP05","MCRP06","MCRP07","MCRP08","MCRP09","MCRP10","MCRP11","MCRP12","MCRP13","MCRP14\ 
","MCRP15","MCRP16","MCRP17","MCRP18","MCRP19","MCRP20","MCRP21","MCRP22","MCRP23","MCRP24","MCRP25","MCRP26","MCRP27","MCRP28","MCRP29","MCRP30","MCTA","MCTXJS","MCTXA1","MCEXR1","MCTC01","MCTC02","MCTC03","MCTC04","MCTC05","MCTC06","MCTC07","MCTC08","\ 
MCTC09","MCTC10","MCND01","MCND02","MCND03","MCND04","MCND05","MCND06","MCND07","MCND08","MCND09","MCND10","MCCC01","MCCC02","MCCC03","MCCC04","MCCC05","MCCC06","MCCC07","MCCC08","MCCC09","MCCC10","MCPECC","MCALS","MCISS","MCGLBA","MCALCL","MCLMTH","MCL\ 
F","MCOBJ1","MCOBJ2","MCOBJ3","MCSUB1","MCTOU","MCSBLI","MCANPA","MCCT","MCCERT","MCMCUS","MCBTYP","MCPC","MCPCA","MCPCC","MCINTA","MCINTL","MCD1J","MCD2J","MCD3J","MCD4J","MCD5J","MCD6J","MCFPDJ","MCCAC","MCPAC","MCEEO","MCERC","MCUSER","MCPID","MCUPMJ\ 
","MCJOBN","MCUPMT","MCBPTP","MCAPSB","MCTSBU"' 

я хочу, чтобы извлечь "text1", text2,.....,"textn"; я попытался

Pattern p = Pattern.compile("^ELEMENTS\\s'\".*\"'$",Pattern.MULTILINE); 
Matcher m = p.matcher(s); 

, но он не работает только для одной строки Строка

+0

Почему у вас есть '\\ s' там, где нет« пробелов »/ вкладок/etc после' ELEMENTS'? Кроме того, вы, вероятно, хотите полностью удалить многострочную структуру, поскольку кажется, что вы хотите сделать противоположное тому, что она делает. – Jerry

+0

@ jerry есть пространство в оригинальной String, и я был смущен тем, что Multiline делает – Mikou

ответ

6

Предупреждение: Pattern.MULTILINE не делать то, что вы думаете, что он делает. Если вы хотите совместить контент внутри ввода, который охватывает более одной строки, вы хотите Pattern.DOTALL: это говорит о том, что точки и дополненные классы символов также должны совпадать с символами новой строки, которые они по умолчанию не имеют.

Что Pattern.MULTILINE делает меняется поведение ^ и $ якорей, так что они совпадают до и после символа новой строки, соответственно, в дополнение к соответствуя начало и конец ввода (который является их поведение по умолчанию).

Т.е., учитывая вход:

Hello\nworld\n 

у вас есть это:

Hello \n world \n 
|     # `^` without Pattern.MULTILINE 
        | # `$` without Pattern.MULTILINE 
|  |  | # `^` with Pattern.MULTILINE 
     |  | | # `$` with Pattern.MULTILINE 

Да, название MULTILINE сбивает с толку. Так что это модификатор /m perl-подобных двигателей регулярных выражений vs /s ...

+0

, спасибо, теперь понятно :) – Mikou

+1

Рад, что я мог бы помочь;) Я не знаю никого, кто не упал в ловушку. , – fge

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