鉴于文件名为22-PLUMB-CLR-RECTANGULAR.0001.rfa
,我需要一个RegEx来匹配它。那么基本上它是任何可能的角色。和4个数字以及四个可能的文件扩展名之一。
我试过^.?\.\d{4}\.(rvt|rfa|rte|rft)$
,我原本认为这是正确的,但我想我的RegEx理解并没有像我想象的那样进步。现在,.?\.\d{4}\.(rvt|rfa|rte|rft)$
确实有效,唯一的区别是我没有用^指定字符串的开头。在另一种情况下,文件名始终采用journal.####.txt
格式,我使用了^journal\.\d{4}\.txt$
,并且匹配journal.0001.txt
就像一个冠军。显然,当我指定一个特定的字符串,而不是任何字符。?是差异,但我不明白为什么。
答案 0 :(得分:1)
它永远不会匹配提到的字符串,因为^.?
表示匹配输入字符串的开头,然后是一个可选的单个字符。然后它会查找一系列点和数字,并且没有任何内容。因为我们还没有通过第一个角色。
为什么没有^
会有效?因为如果没有^
,就可以通过所有字符查找匹配项,并在R
之前停止并继续匹配到最后。
那很好但是第一种方法应该是^.*
。 Kleene明星贪婪地匹配每一件事然后回溯,但?
是这里的运算符,它使前面的模式可选。这意味着一个字符,而不是很多字符。