查看java正则表达式背后的问题。“向后看”组没有明显的最大长度
我需要使用Java正则表达式在xml文档中的查看java正则表达式背后的问题。“向后看”组没有明显的最大长度,java,regex,lookbehind,Java,Regex,Lookbehind,我需要使用Java正则表达式在xml文档中的标记中匹配sequence='999'(xml解析器不是选项) xml的片段: <xmltag sequence='11'> <noteinfo noteid='1fe' unid='25436AF06906885A8525840B00805DBC' sequence='3'/> </xmltag> 我使用的是:(?我猜您可能希望设计一个类似以下内容的表达式: (?=<noteinfo).*(sequ
标记中匹配sequence='999'
(xml解析器不是选项)
xml的片段:
<xmltag sequence='11'>
<noteinfo noteid='1fe' unid='25436AF06906885A8525840B00805DBC' sequence='3'/>
</xmltag>
我使用的是:
(?我猜您可能希望设计一个类似以下内容的表达式:
(?=<noteinfo).*(sequence='[0-9]'|sequence='[1-9][0-9]{0,3}')
(?=如果不是绝对必要,请不要使用lookback
您可以使用大括号缩短lookback的长度,例如{1255}
您的问题是可以解决的,无需使用查找:
static final Pattern seqpat=Pattern.compile(“]+(?sequence\\s*=\\s*'[\\d]*')”,Pattern.MULTILINE);
使用以下命令通读该文件:
Matcher m = seqpat.matcher( s );
while( m.find() )
System.err.println( m.group( "seq" ) );
模式。如果包装了noteinfo行,则需要多行。
seqpat
查找(不匹配!)以
开头的任何行
请求的序列被捕获在组(“seq”)
也许您必须处理序列
,=
和序列id之间的空格或换行符'3'
-因此:\\s*=\\s*
上面的模式查找每个序列id(甚至是empy序列)
要仅查找'999'
序列id,请使用以下模式:
Pattern.compile(“]+(?sequence\\s*=\\s*'999')”,Pattern.MULTILINE);
任何避免错误的方法?
使用解析器。说真的,这是唯一的方法。
Matcher m = seqpat.matcher( s );
while( m.find() )
System.err.println( m.group( "seq" ) );