Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 什么是正则表达式来匹配文件的完整路径,该文件的字母数字名称仅以数字结尾?_Regex - Fatal编程技术网

Regex 什么是正则表达式来匹配文件的完整路径,该文件的字母数字名称仅以数字结尾?

Regex 什么是正则表达式来匹配文件的完整路径,该文件的字母数字名称仅以数字结尾?,regex,Regex,我有一组字符串。它们是文件的完全绝对路径。从这个列表中,我想选择那些包含文件名的路径,该文件名以下划线结尾,后跟三位数字,后跟扩展名 文件名必须以字母开头,而不是数字或下划线,然后可以包含任意数量的字母、数字和下划线。在结尾处,它必须在扩展名前有下划线和三位数字 我尝试使用\w,但它已包含数字,因此将与那些不以数字结尾的文件匹配。我只找到了这两个,但还不够好: \w(_[0-9]{3})\.(vhd|vhdl|sv|v)$ (_[0-9]{3})\.(vhd|vhdl|sv|v)$ 以下是几

我有一组字符串。它们是文件的完全绝对路径。从这个列表中,我想选择那些包含文件名的路径,该文件名以下划线结尾,后跟三位数字,后跟扩展名

文件名必须以字母开头,而不是数字或下划线,然后可以包含任意数量的字母、数字和下划线。在结尾处,它必须在扩展名前有下划线和三位数字

我尝试使用\w,但它已包含数字,因此将与那些不以数字结尾的文件匹配。我只找到了这两个,但还不够好:

\w(_[0-9]{3})\.(vhd|vhdl|sv|v)$ 
(_[0-9]{3})\.(vhd|vhdl|sv|v)$
以下是几个例子:

这些将不匹配:

./Qsys_Systems/MY_SYS_TB/simulation/submodules/1_MY_SYS_TB_mm_interconnect_0_router.sv
./Qsys_Systems/MY_SYS_TB/simulation/submodules/_MY_SYS_TB_mm_interconnect_0_router.sv
./Qsys_Systems/MY_SYS_TB/simulation/submodules/MY_SYS_TB_mm_interconnect_0_router.sv
这些将通过比赛:

./Qsys_Systems/MY_SYS_TB/simulation/submodules/MY_SYS_TB_mm_interconnect_0_router_001.sv
./Qsys_Systems/MY_SYS_TB/simulation/submodules/MY_SYS_TB_mm_interconnect_0_router_002.sv
./Qsys_Systems/MY_SYS_TB/simulation/submodules/MY_SYS_TB_mm_interconnect_0_router_004.sv

根据您的描述,您可以使用

^(?:.*/)?[a-zA-Z]\w*\d{3}\(?:vhd | vhdl | sv | v)$

详情:

  • ^
    -字符串开始
  • (?:.*/)?
    -任意文本(尽可能多的断行字符以外的任何零个或多个字符)的可选序列,然后是一个
    /
    字符
  • [a-zA-Z]
    -一封信
  • \w*
    -零个或多个字母/数字/
    \u
  • -下划线
  • \d{3}
    -三位数字
  • \.
    -a
  • (?:vhd | vhdl | sv | v)
    -扩展之一
  • $
    -字符串结束
如果您的正则表达式风格是POSIX ERE,请使用捕获组和
[0-9]
来匹配数字:
^(.*/)?[:alpha:][[u[:alnum:]*.[u0-9]{3}\(vhd | vhdl | sv | v)$

如果正则表达式风格支持Unicode属性类,则可以使用与任何Unicode字母匹配的
\p{L}
[[:alpha:]
POSIX字符类替换
[a-zA-Z]


请参阅。

问题是,使用^s会使模式失败。我将给出一些有疑问的例子。@quantum231请在要点之后对长正则表达式进行更正。这似乎是解决方案^(?:*)[a-zA-Z]\w*\d{3}\(?:vhd | vhdl | sv | v)$您能解释一下(?:*)的作用吗?