我正在尝试运行使用字母日期命名的文件,并相应地设置文件日期时间.我的代码运行正常,当我注意到这个问题时,我已经准备好考虑它了.我的代码应检测两个日期并生成错误,但事实并非如此.我已经提取了相关代码,并重新创建了问题:
$str = "test20001231 20170415.txt"
$match = ($str -match "(?<=\b|\D)20\d{6,6}(?=\b|\D)")
"$match"
"$($Matches.length)"
"$($Matches[0].ToString())"
Run Code Online (Sandbox Code Playgroud)
给出这个输出:
True
1
20001231
Run Code Online (Sandbox Code Playgroud)
我对正则表达式代码的理解是它应该匹配从20开始的8位数字的所有内容,无论它在字符串中的哪个位置,除非它跟随或在另一个数字之前.所以我期待$ Matches.length为2.
我已经在网上测试了许多地方的正则表达式代码,它符合我期望的两个日期:http ://regexstorm.net/tester?p =%28%3f%3c%3d%5cb%7c%5cD %2920%5cd%7b6%2c6%7d%28%3f%3d%5cb%7c%5cD%29&i = test20001231 + 20170415.txt http://www.phpliveregex.com/p/jLA
该问题适用于PS和PS ISE.我搜索了很多(我认为),并没有提出任何有用的信息.有什么建议?非常感谢,戴夫