我有以下正则表达式来验证所谓的宏调用的语法:
(\b\$[A-Za-z:]*\$\b)
我有以下正则表达式来匹配文件夹路径:
^(?:[A-Za-z]{1}:\\|[\\]{2}|[A-Za-z])(?:[^\\\/:*?"<>|]*)+\\$
现在我有两个要求:
= " ' / # , $
掩码是#-char。因此=
仅在#=
显示时才允许{。}}。#
符号掩盖。如果出现宏,我想检查宏语法。 宏总是在未屏蔽的$
字符之间。
有效示例:
C:\ TEMP \测试\
\\文件服务器\生产#$ \用户\
d:\ $ FindDirectory $ \为approot \
C:\ $ FindDirectory $ \ pathwith#$美元\
C:\ $ findroot:appuser $ \ Test with equal#= 123 and hashtag ## \
无效示例:( - &gt;有原因)
C:\ temp \ test
-> no ending \
\\ fileserver \ production $ \ users \
-> not masked $
C:\ $ FindDirectory1 $ \ approot \
-> invalid char (1) in macro-call
不幸的是我对正则表达式不是很熟悉......
上下文:
在我的应用程序中,我有一个编辑器,用户可以在其中提供基于xml的输入。在这个输入中,他可以定义所谓的宏,然后他可以使用它。
所以场景可以是:
刚刚收到另一个案例,我忘记了
宏调用也可以在字符串的开头,如:
$ getFolderPath:根$ \ APPDIR \
我已将coladict提供的解决方案修改为以下内容:
^(?:(?:(\$[A-Za-z0-9:.]*\$)|(?:#[="'#,\$]|[^#$])*))+$
唯一缺少的是无效的路径字符,如\ /:*? “&lt;&gt;无法识别,C:\temp\hello<world
之类的内容匹配(但不应匹配)
答案 0 :(得分:1)
我设法制作了一个匹配所有给定示例的正则表达式并拒绝了无效示例,但您可能不同意它。
在RegexPlanet上进行了测试。
in plain text: ^(?:[A-Za-z]:\\|\\{2})(?:(?:(\$[A-Za-z:]*\$)|[^\$](?:#[="'/#,\$]|[^#$])*[^\$]))+\\$
in C# string: "^(?:[A-Za-z]:\\\\|\\\\{2})(?:(?:(\\$[A-Za-z:]*\\$)|[^\\$](?:#[=\"'/#,\\$]|[^#$])*[^\\$]))+\\\\$"
从这部分你给出,试图匹配驱动器,我相信最后一段无效并删除它:
(?:[A-Za-z]{1}:\\|[\\]{2}|[A-Za-z])
现在这部分是:
(?:[A-Za-z]:\\|\\{2})
其余部分非常有趣,但是如何使用正则表达式#
使用(?:#[="'/#,\$]|.)+
进行转义的概念与示例C字符串解析器完全相同,我可以使用它。记住我找到的地方。