我正在尝试破译浮点数的正则表达式(来自php.net)
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
LNUM表示一次或多次出现数字0到9。 DNUM表示零或更多的数字0到9,后跟一个小数点。我不知道如何解释{LNUM}。根据我的阅读,大括号意味着重复,但不会
[\.]{LNUM}
表示小数点的LNUM出现(这没有意义)。然后在交替的第二部分(在|字符之后),{LNUM}出现在开头,我没有在regexp语法(POSIX或Perl)中找到使用大括号的定义。有人可以帮我解决这个问题吗?
谢谢你, 比尔
答案 0 :(得分:2)
这不是严格的正则表达式语法。 {LNUM}
是LNUM定义的占位符。例如,严格的regexp语法中的第二行是
([0-9]*[\.][0-9]+) | ([0-9]+[\.][0-9]*)
答案 1 :(得分:1)
是的,与正则表达式无关,它看起来像一个变量替换 你说这是正式定义吗?在替换并查看指数表示法之后,看起来整个事物都可以减少。此外,量词的使用会产生无限大量的数字。并且它们不会在任何地方占用空间,也许它是对某些东西的严格解析。
[+-]?(([0-9]+ | ([0-9]*[\.][0-9]+) | ([0-9]+[\.][0-9]*)) [eE][+-]? [0-9]+)
[+-]? # '+' or '-' 0 or 1 time
( # group 1, not needed
( # group 2
[0-9]+ # a digit, 1 or more times
| # OR
( # group 3
[0-9]* # a digit, 0 or more times
[\.] # a '.' exactly 1 time, character class not needed
[0-9]+ # a digit, 1 or more times
) # end group 3
| # OR
( # group 4
[0-9]+ # a digit, 1 or more times
[\.] # a '.' exactly 1 time, character class not needed
[0-9]* # a digit, 0 or more times
) # end group 4
) # end group 2
[eE] # 'e' or 'E' exactly 1 time
[+-]? # '+' or '-' 0 or 1 time
[0-9]+ # a digit, 1 or more times
) # end group 1, not needed