2015-06-22 287 views
1

需要一个正则表达式匹配以下所有条件:正则表达式 - 匹配文件名带或不带扩展名

hello 
hello. 
hello.cc 

我试过\b\w+\.?\w+?\b,但这并不符合"hello."(上面提到的第二个字符串)。

+0

问题是你在点之后执行字边界'\ b',它不匹配。试试这个:'\ b \ w + \。?(\ w + \ b)?'https://regex101.com/r/lX1aE0/1有关单词边界的更多解释,请查看http://www.regular- expressions.info/wordboundaries.html – bro

+0

@bro实际上,它是双重的,包括字边界和他在点之后至少要求一个字符的事实。你的解决方案虽然解决了,但提交一个答案。 – melwil

回答

1

这是一样简单,因为我可以得到它:

\b\w+\.?\w* 

请参阅demo

4

的问题是,你执行一个点之后的单词边界\b,不匹配,并且您需要与\w+?后至少一个字符的事实(懒惰匹配!)。 试试这个:

\b\w+\.?(\w+\b)? 

https://regex101.com/r/lX1aE0/1

有关单词边界更多的解释,检查此链接
http://www.regular-expressions.info/wordboundaries.html

+1

正则表达式中的错误还在于在点之后有一个强制的惰性“一个或多个”量词('\ w +?'),这会阻止匹配。 – melwil

+0

@melwil。是的,谢谢你的改正。我改编了我的答案。 – bro

+0

第二个'\ b'是多余的。 '\ w +'会消耗下一个字边界的所有内容。即'\ w + \ b' ==='\ w +' – Bohemian

相关问题