我有以下正则表达式来检查伪函数调用的语法:
(\$[^\W]+\$)
因此,如果我有路径或其他东西,我可以检查包含函数调用的语法是否有效。
函数调用始终以$ -char开始和结束。
要验证路径的语法,我有以下与完整路径匹配的正则表达式:
^([A-Za-z]\:|\\|\.)(\\[^\\\/:*?""<>|]*)+[\\]$
我尝试将这两个正则表达式与 | 结合使用,但是每个与路径语法匹配的函数调用都是有效的。
我需要一个检查路径语法的正则表达式,如果有一个函数调用(前导和结束$),应该检查函数调用语法。
有效字符串
无效字符串
答案 0 :(得分:1)
您可以使用
^(?!.*\\\$\w*[^\w\\][^\\]*\$(?:\\|$))(?:[A-Za-z]:|[\\.])(?:\\[^\\\/:*?"<>|]*)+\\$
请参阅regex demo
主要思想是使包含以$
开头的子路径的任何字符串失败,然后包含除\
之外的任何非字char(dir分隔符,这可能需要调整),以及然后有\
以外的任何数量的字符,最多为$
和\
或字符串的结尾。
<强>详情
^
- 字符串开头(?!.*\\\$\w*[^\w\\][^\\]*\$(?:\\|$))
- 如果模式从字符串的开头直接匹配到右边,则会导致匹配失败:
.*
- 除了换行符之外的任何0 +字符,尽可能多\\\$
- \$
子字符串\w*
- 0+ word chars [^\w\\]
- 除了单词和\
字符[^\\]*
- 除\
char \$
- $
字符(?:\\|$)
- \
或字符串结尾(?:[A-Za-z]:|[\\.])
- ASCII字母和:
之后,或\
或.
(?:\\[^\\\/:*?"<>|]*)+
- 出现1次或多次:
\\
- \
字符[^\\\/:*?"<>|]*
- 除了字符类\\
- \
字符$
- 字符串结束。答案 1 :(得分:0)
如果稍微调整一下,WiktorStribiżew提供的正则表达式可能会有效:
^(?:[A-Za-z]:|[\\.])(?:\\(?:\$\w+\$|(?!\$[^\\\/:*?"<>|]+\$\\)[^\\\/:*?"<>|]+))+\\$
变化是: