【问题标题】:Correctness of a regular expression正则表达式的正确性
【发布时间】:2011-10-07 07:20:39
【问题描述】:

我正在尝试创建一个匹配以下任一条件的正则表达式 -

FVAL(A)
FVAL("A")
FVAL(A,B)
FVAL("A",B)
FVAL("A","B")
FVAL(A,"B")
FVAL(A,B,C)
FVAL("A",B,C)
FVAL("A","B",C)
FVAL("A","B","C")
FVAL("A",B,"C")
FVAL(A,"B","C")

正则表达式 -

FVAL\s*\(\s*["*]\s*\w+\s*["*]\s*,*\s*["*]\s*\w+\s*["*]\s*,*\s*,*\s*["*]\s*\w+\s*["*]\s*\)

这个正则表达式应该返回所有和任何形式的函数。

例如-
如果匹配字符串是-FVAL(A,"B")+5,那么匹配组应该是FVAL(A,"B")

附: - 我忽略了匹配字符串中的空格,但它们可以存在。

【问题讨论】:

  • 你的第六个例子,FVAL("A,"B"),对吗? ("A)

标签: regex vb.net string .net-2.0


【解决方案1】:

你的表达方式方式太复杂了。

FVAL\("?\w+"?(?:,"?\w+"?){0,2}\)

细分:

FVAL #“FVAL” \( # "(" "? # 一个可选的双引号 \w+ # 至少一个单词字符 "? # 一个可选的双引号 (?: # 团体 , # 一个逗号 "?\w+"? # 引号 - 单词字符 - 引号 ){0,2} #结束组,重复0-2次 \) # ")"

在您认为合适的表达式中插入空格 \s

【讨论】:

  • 太棒了。解决了。正则表达式是如此强大。
  • @Soham 如果要确保引号一致,可以使用("?)\w+\1 代替"?\w+"?(其中\1 必须是相应的组号)。这样,当(且仅当)还有一个开引号时,正则表达式期望一个闭引号。
  • 我正在使用这个FVAL\s*\(\s*""?\s*\w+\s*""?\s*(?:\s*,\s*""?\s*\w+\s*""?\s*){0,2}\)。由于使用了空间,我不能使用\1。有没有其他办法?
  • \s*\1 有什么关系?
  • 如果我使用FVAL\s*\(\s*""?\s*\w+\s*""?\s*(?:\s*,\s*""?\s*\w+\s*\1\s*){0,2}\),它会给我一个错误,即未定义组\1
猜你喜欢
  • 2021-08-05
  • 2022-08-08
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2020-09-21
相关资源
最近更新 更多