Regex 正则表达式句柄子字符串不同

Regex 正则表达式句柄子字符串不同,regex,Regex,我使用以下正则表达式检查伪函数调用的语法: (\$[^\W]+\$) 因此,如果我有一个路径或其他东西,我可以检查包含函数调用的语法是否有效 函数调用始终以$-char开头和结尾 要验证路径的语法,我有以下与完整路径匹配的正则表达式: ^([A-Za-z]\:|\\|\.)(\\[^\\\/:*?""<>|]*)+[\\]$ ^([A-Za-z]\:\\\\\\\\\)(\\[^\\\/:*?”“\\\]*)+[\\]$ 我已经尝试将这两个正则表达式与|结合起来,但是匹配路径语

我使用以下正则表达式检查伪函数调用的语法:

(\$[^\W]+\$)
因此,如果我有一个路径或其他东西,我可以检查包含函数调用的语法是否有效

函数调用始终以$-char开头和结尾

要验证路径的语法,我有以下与完整路径匹配的正则表达式:

^([A-Za-z]\:|\\|\.)(\\[^\\\/:*?""<>|]*)+[\\]$
^([A-Za-z]\:\\\\\\\\\)(\\[^\\\/:*?”“\\\]*)+[\\]$
我已经尝试将这两个正则表达式与|结合起来,但是匹配路径语法的每个函数调用都是有效的

我需要一个正则表达式来检查路径语法,如果有函数调用(前导和结束$),那么应该检查函数调用语法

有效字符串

  • C:\temp\testfolder\
  • C:\$getTempPath$\testfolder\
  • C:\$getTempPath$\$getTestFolder$\
  • C:\programms(x86)\$getAppFolder$\
  • C:\temp\alternative$文件夹名称(适用于用户)\
无效字符串

  • C:\$getPrograms(x86)$\testfolder\
  • C:\$my function$\test\

    • 如果稍微调整一下,Wiktor Stribiżew提供的正则表达式可能会起作用:

      ^(?:[A-Za-z]:|[\\.])(?:\\(?:\$\w+\$|(?!\$[^\\\/:*?"<>|]+\$\\)[^\\\/:*?"<>|]+))+\\$
      
      ^(?[A-Za-z]:|[\\.](?:\$\w+\$)(?!\$[^\\\/:*?“|]+\$\)[^\\/:*?“\]+))+\\$
      
      这些变化是:

    • 允许在路径名中使用$字符
    • 添加一个负的前瞻表达式,以防止它允许$characters环绕路径名
    • 你可以用

      ^(?!.*\\\$\w*[^\w\\][^\\]*\$(?:\\|$))(?:[A-Za-z]:|[\\.])(?:\\[^\\\/:*?"<>|]*)+\\$
      
      ^(?。.*\\$\w*[^\w\\][^\]*\$(?:\\\\\\\$)(?:[A-Za-z]:\\[\\.])(?:\\[^\\\/:*?“\]*)+\\$
      

      其主要思想是使包含以
      $
      开头的子路径的任何字符串失败,然后包含除
      \
      以外的任何非单词字符(dir分隔符,这可能需要调整),然后包含除
      \
      以外的任何字符量,直到
      $
      \
      或字符串结尾

      详细信息

      • ^
        -字符串的开头
      • (?!\\\\$\w*[^\w\\][^\\]*\$(?:\\\\\\\\$)
        -如果模式从字符串开始立即向右匹配,则会导致匹配失败的负前瞻:
        • *
          -除换行符以外的任何0+字符,尽可能多
        • \\$
          -a
          \$
          子字符串
        • \w*
          -0+字字符
        • [^\w\\]
          -除了单词和
          \
          字符以外的任何字符
        • [^\\]*
          -0+字符,而非
          \
          字符
        • \$
          -a
          $
          字符
        • (?:\\\\\$)
          -要么
          \
          要么字符串结束
      • (?:[A-Za-z]:|[\\.])
        -ASCII字母及其后的
        ,或
        \
      • (?:\\[^\\/:*?“|]*)+
        -1次或多次出现:
        • \\
          -a
          \
          字符
        • [^\\\/:*?“|]*
          -0+字符,字符类中定义的字符除外
      • \\
        -a
        \
        字符
      • $
        -字符串结束

      如果您的路径可以包含目录名或函数调用,并且目录名从不包含美元符号,则只需将函数regex放在路径regex中,作为路径名的一种替代方法(并确保从路径名中有效的字符中排除美元符号,但情况似乎已经如此)。如果这确实是您想要的,请回答您的问题以更好地解释您的要求。Try$对文件夹有效。函数调用必须介于两个$符号之间。单个出现的$应解释为path@WiktorStribiżew:这几乎就是我要找的。唯一的问题是,一美元也是有效的d表示windows中的路径。类似于“C:\hiddenprograms$\allfiles\”的内容在windows中有效。那么为什么
      C:\$getPrograms(x86)$\testfolder\
      无效?您的问题似乎缺乏精确的要求。