2013-07-06 87 views
4
我使用正则表达式的新

,我有这样多行正则表达式

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'那里的时候有看似是'ELEMENTS'后无空格/制表符/等?此外,你可能想要完全删除多行,因为它看起来你想做与它所做的相反的事情。 – Jerry

+0

@jerry原来的字符串中有一个空格,我很困惑什么多行 – 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是混乱的。那么,类似Perl的正则表达式引擎VS /s/m修改...

+0

感谢它现在很清楚:) – Mikou

+1

很高兴我可以帮忙;)我不知道谁没有陷入这个陷阱.. 。 – fge