正则表达式组java

时间:2014-09-02 06:55:25

标签: java regex

您好我正在写正则表达式:我需要从这一行获取信息

;row:1;field:2;name:3

我这行的正则表达式是

.*(row:([0-9]{1,}))?;.*field:([0-9]{1,});.*name:([0-9]{1,});

但是单词row是可选的问题,我也可以得到没有单词行的行,但在这种情况下我的正则表达式不起作用,我怎么写呢?

感谢。

1 个答案:

答案 0 :(得分:1)

如果您只是想让单词行可选,您可以用括号括起来并使用问号表示您想要零或一个括号内容。我已经在下面展示了:

(row:)?

这将找到零或一个"行:"。如果您不打算创建匹配组,我建议您在开括号内添加?:运算符:

(?:row:)?

添加?:运算符会告诉程序括号不是匹配组的一部分,而您只是使用括号对字母进行分组。所以把它放到正则表达式中就像这样:

.*((?:row:)?([0-9]{1,}))?;.*field:([0-9]{1,});.*name:([0-9]{1,});

如果您希望将此应用于"字段:"和"名称:",那么你会得到这个:

.*((?:row:)?([0-9]{1,}))?;.*(?:field:)?([0-9]{1,});.*(?:name:)?([0-9]{1,});

如果您不希望表达式中的其他括号创建匹配组,我也会更改它们。此外,为了缩短表达并使其更清晰,我会将[0-9]更改为\d,这意味着任何数字,我会将{1,}替换为+,这意味着&# 34;一个或多个",并删除不必要的parens导致这个:

.*(?:(?:row:)?\d+)?;.*(?:field:)?\d+;.*(?:name:)?\d+;

我不确定这是你想要的最终表达,因为你的问题不是很具描述性,但我已经告诉你如何找到一个或多个" row:&#34 ;并且在不改变其含义的情况下清理表达。