正则表达式组java
嗨,我在写正则表达式:我需要从这行获得信息正则表达式组java,java,regex,Java,Regex,嗨,我在写正则表达式:我需要从这行获得信息 ;row:1;field:2;name:3 这一行的正则表达式是 .*(row:([0-9]{1,}))?;.*field:([0-9]{1,});.*name:([0-9]{1,}); 但是问题是单词行是可选的,我也可以得到没有单词行的行,但是在这种情况下,我的正则表达式不工作,我怎么写呢 谢谢。如果您只是想让单词行成为可选的,您可以用括号将其括起来,并用问号表示您想要零或一个括号内容。我已展示如下: (行:)? 这将找到“行:”中的零或一个。如
;row:1;field:2;name:3
这一行的正则表达式是
.*(row:([0-9]{1,}))?;.*field:([0-9]{1,});.*name:([0-9]{1,});
但是问题是单词行是可选的,我也可以得到没有单词行的行,但是在这种情况下,我的正则表达式不工作,我怎么写呢
谢谢。如果您只是想让单词行成为可选的,您可以用括号将其括起来,并用问号表示您想要零或一个括号内容。我已展示如下:
(行:)?
这将找到“行:”中的零或一个。如果您不尝试创建匹配组,我建议您在左括号中添加?:
运算符:
(?:行:)?
添加?:
操作符会告诉程序括号不是匹配组的一部分,您使用括号只是对字母进行分组。因此,将其放入正则表达式中如下所示:
*((?:行:)([0-9]{1,}))*字段:([0-9]{1,})*名称:([0-9]{1,})代码>
如果要将其应用于“field:”和“name:”,则会得到以下结果:
*((?:行:)([0-9]{1,}))*(?:字段:)([0-9]{1,})*(?:名称:)([0-9]{1,})代码>
如果不希望表达式中的其他括号创建匹配组,我也会更改它们。此外,为了稍微缩短表达式并使其更清晰,我将[0-9]
更改为\d
,表示任意数字,并将{1,}
替换为+
,表示“一个或多个”,并删除导致以下情况的不必要参数:
*(?:(?:行:)?\d+*(?:字段:)?\d+*(?:名称:)?\d+代码>
我不确定这是否是您想要的最终表达式,因为您的问题不是很具有描述性,但我已经向您展示了如何找到一个或多个“行:”并在不改变其含义的情况下稍微清理表达式。发布您的curreny代码。非常感谢您,但此正则表达式在值行中返回null。。。,我能改变什么?谢谢你的可选内容@user1059769您能给出一个您希望捕获的输入et的更好的示例吗?(msg:\“([a-zA-Z0-9\\s()\\\\\\\.!@$%^&*-\'~]{1,};.*(行:([0-9]{1,});.*字段:([0-9]{1,}).*名称:([0-9]{1,});