查看java正则表达式背后的问题。“向后看”组没有明显的最大长度

查看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

我需要使用Java正则表达式在xml文档中的
标记中匹配
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" ) );