Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式组java_Java_Regex - Fatal编程技术网

正则表达式组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,});