【发布时间】:2023-03-22 09:29:01
【问题描述】:
我有一个很长的 RE 来匹配多个文件中的日期,我想把它分成多行,以便更容易阅读和更新。我将其设置为变量,然后在正则表达式语句中调用该变量。
set ::eval::regexdate { \d[\/\.-]\d{2}[\/\.-]\d{4}|\d{2}[\/\.-]\d{2}[\/\.-]\d{4}|\d{4}[\/\.-]\d{2}[\/\.-]\d{2}|(([12]\d|3[01])|([12]\d|3[01])(th|nd|rd|st))\s(January|February|March|April|May|June|July|August|September|October|November|December)\s\d{4}|(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)[\/\.-]\d{2}[\/\.-]\d{4} }
然后我使用以下正则表达式行调用它...
if {[regexp "($::eval::regexdate)" $linefromfile all date]} {
Do something...
}
如果将 RE 设置为一个长字符串,这一切都可以正常工作,但如果我尝试使用本文所述的 (?x) 将其拆分为多行。
regexp pattern across multiple lines
set ::eval::regexdate {(?x)
\d[\/\.-]\d{2}[\/\.-]\d{4}|
\d{2}[\/\.-]\d{2}[\/\.-]\d{4}|
\d{4}[\/\.-]\d{2}[\/\.-]\d{2}|
(([12]\d|3[01])|([12]\d|3[01])(th|nd|rd|st))\s(January|February|March|April|May|June|July|August|September|October|November|December)\s\d{4}|
(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)[\/\.-]\d{2}[\/\.-]\d{4}
}
我收到以下错误...
`couldn't compile regular expression pattern: quantifier operand invalid.`
我不确定为什么会发生这种情况,我的理解是使用 (?x) 会忽略所有空白和 cmets,因此它应该将这些行重新缝合在一起以创建一个长 RE,不是吗?是“|”操作数导致我拆分 RE 的方式出现问题?
任何帮助都将不胜感激,以找出为什么在使用 (?x) 时它不起作用。
谢谢
【问题讨论】: