如何使用分隔符和分隔符创建匹配标记的正则表达式?

时间:2013-11-26 20:50:32

标签: java regex

我希望能够在java中编写一个正则表达式,以确保匹配以下模式。

<D-05-hello-87->

对于字母D,这可以是大写字母的'D'或'E',也可以只有一个字母。

您看到的两个数字必须始终为2位十进制数字,而不是1或3个数字。

字符串必须以'&lt;'开头和结尾和'&gt;'并包含' - '以分隔其中的部分。

中间'hello'中的消息可以是任何字符,但长度不得超过99个字符。它可以包含空格。

此模式也将重复,因此表达式需要识别这些模式的logn字符串中的不同个别模式,并确保它们遵循此模式结构。 E.g

到目前为止,我已经尝试过这个:

([<](D|E)[-]([0-9]{2})[-](.*)[-]([0-9]{2})[>]\z)+

但问题是(。*)在任何字符匹配中看到任何后面的内容并忽略其余的模式。

怎么可能这样做? (使用Java reg ex语法)

3 个答案:

答案 0 :(得分:2)

尝试使其不贪婪或否定:

(<([DE])-([0-9]{2})-(.*?)-([0-9]{2})>)

现场演示:http://ideone.com/nOi9V3

答案 1 :(得分:1)

更新:已测试并正常工作

<([DE])-(\d{2})-(.{1,99}?)-(\d{2})>

看到它正常工作:http://rubular.com/r/6Ozf0SR8Cd

您不应将-<>包裹在[ ]

答案 2 :(得分:0)

假设您想要在第一个短划线停留,可以使用[^-]*代替.*。这将匹配所有非短划线字符。