正则表达式一次或多次使用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*:”--然后用逗号修剪和拆分,然后修剪结果。