Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_String_Pattern Matching - Fatal编程技术网

正则表达式一次或多次使用JAVA

正则表达式一次或多次使用JAVA,java,regex,string,pattern-matching,Java,Regex,String,Pattern Matching,嗨,我正在尝试将字符串与模式匹配 这是可能的字符串 signal CS, NS, dl: stateType := writeOrRead0; signal CS, pS : stateType := writeOrRead0; signal dS : stateType := writeOrRead0; 我只关心第一个冒号的模式 但信号的数量可能不止一个,甚至可能是三个或四个 这是我的正则表达式 ^signal\\s*(\\w+),*\\s*(\\w+)\\s*: 它将拾取第二个两个

嗨,我正在尝试将字符串与模式匹配

这是可能的字符串

signal CS, NS, dl: stateType := writeOrRead0; 
signal CS, pS : stateType := writeOrRead0; 
signal dS : stateType := writeOrRead0; 
我只关心第一个冒号的模式

但信号的数量可能不止一个,甚至可能是三个或四个 这是我的正则表达式

^signal\\s*(\\w+),*\\s*(\\w+)\\s*:
它将拾取第二个两个信号,但对于第二个信号,它拾取CS和pS,但在我使用时拾取下一个信号中的d和S

matcher.group()
分开上来

有谁能给我一个表达式,它将拾取所有信号名称,无论是一个、两个、三个还是更多?

我会做下一件事:

1-获取完整的信号组:CS、NS、dl(例如)

2-解析它们

你的例子是:

1-
^signal\\s((\\w*)(?:,\\s)?)+


2-现在你有一个字符串在一个组中,比如“CS,NS,dl”,现在有一个简单的“,”的拆分,你可以把它们放在一个数组中。

如果你想每个信号名有一个组,那是不可能的(除非你有一个信号数的上限,那么你可以写出整个内容,但这会非常难看)

因此,您必须与一个包含名称的组生活在一起,名称以逗号分隔。然后,您可以对其进行后期处理,以获得真实的信号名称

那会有点像

^signal\s+((?:\w+(?:,\s*)?)*)\s*:
(请注意,我没有将其作为Java字符串转义。)


第1组是您的姓名。

您可以使用以下正则表达式:

^信号\s([\w\s]*(?=:))

以signal后跟空格开始,捕获单词后跟逗号和空格的零次或多次出现。在“:”处结束捕获,但不将其包括在匹配项中

为了不在匹配中包含信号本身,您可以使用如下查找:


^(?仅供参考:这是一个玩/测试正则表达式的好地方:我太慢了…我的正则表达式是“^signal(\\s*\\w+,?)+\\s*:”--然后用逗号修剪和拆分,然后修剪结果。