【问题标题】:Regex Matching a string正则表达式匹配字符串
【发布时间】:2013-12-25 03:30:06
【问题描述】:

我目前正在编写一个正则表达式来匹配这样的字符串:

( expr ) | id | num
term * factor | factor
expr

我希望正则表达式匹配每个 ' | 之间出现的每个字符集。 ',但也匹配单独的表达式,例如:

expr

我目前有这个,但我的负面预测错误,我不确定如何继续。

((.*) \|) (.*)$

附:我不太喜欢在这种情况下使用 .* ,但我想不出另一种匹配方式,因为 ' | 之间的字符's 可以是单词字符、数字或介于两者之间的任何内容。

编辑:

我希望输出匹配看起来像这样:

Regex 在第 1 行运行,输出:

3 matches - ( expor ), id, num

Regex 在第 2 行运行:

2 matches - term * factor, factor

Regex 在第 3 行运行:

1 match - expr

【问题讨论】:

  • 你没有做任何负面的前瞻......你也没有指定第二行的输出应该是什么,或者为什么expr 本身应该匹配。这里有很多看似武断的规则。你需要更具体。

标签: c++ regex string dfa nfa


【解决方案1】:

这可能是您的简单正则表达式:

[^|]+

-捕获一个或多个字符,直到到达“|” (或字符串结尾)

或者你也可以使用 String.split("|");

String line = "term * factor | factor";
String[] split = line.split("\\|");

【讨论】: