您好我正在尝试将字符串与模式匹配
这是可能的字符串
signal CS, NS, dl: stateType := writeOrRead0;
signal CS, pS : stateType := writeOrRead0;
signal dS : stateType := writeOrRead0;
我只关心第一个结肠的模式。
但是定义的信号数量可以多于一个,甚至可以是三个或四个 这是我有的正则表达式
^signal\\s*(\\w+),*\\s*(\\w+)\\s*:
它将拾取第二个两个信号,但是对于第二个信号,它会选择CS和pS,但是当我使用
时,下一个信号中的d和Smatcher.group()
单独出现
任何人都可以给我一个表达式来获取所有信号名称,无论是否有两个或更多?
答案 0 :(得分:5)
如果你想为每个信号名称设一个组,那是不可能的(除非你有一个信号数量的上限,那么你可以写出整个事情,但它会非常难看)。
因此,您必须使用包含名称的一个组,逗号分隔。然后你可以对其进行后期处理以获得真实的信号名称。
这会产生类似
的东西^signal\s+((?:\w+(?:,\s*)?)*)\s*:
(请注意,我没有将它作为Java String转义。)
第1组是你的名字。
答案 1 :(得分:4)
我会做下一件事:
1-获取完整的信号组:CS,NS,dl(例如)
2-解析他们
你的例子:
1- ^signal\\s((\\w*)(?:,\\s)?)+
2-现在你在像“CS,NS,dl”这样的组中有一个字符串,现在只需要分成“,”就可以将它们放在一个数组中。
答案 2 :(得分:0)
您可以使用此正则表达式:
^信号\ S([\ W,\ S] *(=?))
以信号后跟空格开始,捕获零个或多个单词出现后跟逗号和空格。结束捕获':'但不包括在比赛中。
为了不在比赛中包含信号本身,你可以使用一个lookbehind如下:
(?&LT =信号)^ \ S(?[\ W,\ S] *(=:))