【发布时间】:2009-08-14 14:17:33
【问题描述】:
我正在尝试使用 Java 中的正则表达式匹配以下内容 - 我有一些数据由两个字符“ZZ”分隔。每条记录都以“ZZ”开头并以“ZZ”结束——例如,我想匹配一个没有结尾“ZZ”的记录,我想匹配下面的尾随“ZZanychars”(注意:* 不包含在字符串 - 他们只是标记我想要匹配的位)。
ZZanycharsZZZZanycharsZZZZanychars
但我不希望以下内容匹配,因为记录已结束:
ZZanycharsZZZZanycharsZZZZanycharsZZ
编辑:澄清一下 - 这是我正在使用的 2 个测试用例:
// This should match and in one of the groups should be 'ZZthree'
String testString1 = "ZZoneZZZZtwoZZZZthree";
// This should not match
String testString2 = "ZZoneZZZZtwoZZZZthreeZZ";
编辑:添加第三个测试:
// This should match and in one of the groups should be 'threeZee'
String testString3 = "ZZoneZZZZtwoZZZZthreeZee";
【问题讨论】:
-
“Z”会出现在数据中吗?例如,
ZZZanycharsZZZZanyZcharsZZZZanycharsZ是否会分解为两个完整的令牌(ZZZanycharsZZ和ZZanyZcharsZZ)和一个不完整的令牌(ZZanycharsZ)? -
是的,单个 Z 可以出现在数据中 - 我添加了另一个测试字符串。现在变得棘手!
-
好的,
ZZanycharsZZZZZanycharsZZ呢?是ZZanycharsZZZ和ZZanycharsZZ,还是ZZanycharsZZ和ZZZanycharsZZ?您如何确定额外的“Z”是第一个标记的一部分还是第二个标记的一部分? -
尾随的 ZZ 是非贪婪的,因此第一个结尾的 ZZ 会终止该令牌。在您的示例中,额外的“Z”将是第二个标记的一部分。