如何构造匹配的正则表达式
qwerty.html
但不是
qwerty.php.html
或任何组合的扩展名。我已经“创建”了这个"/(?!\..*)\.html$/"
,它返回0。如何使其工作?
这是我的代码:
$regexIterator = new RegexIterator(
new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)),
/(?!\..*)\.html$/
);
$files = (iterator_to_array($regexIterator));
答案 0 :(得分:0)
仅当当前位置的右边没有(?!\..*)\.html$
时,.html
模式才在字符串的末尾与.
匹配(强制执行(?!\..*)
否定超前此限制)。请注意,前瞻模式末尾的.*
没什么区别。由于\.
中的\.html
要求在(?!\..*)
禁止它的地方有一个圆点,因此该模式将永远不会匹配任何字符串。
您可以使用
'~^[^.]*\.html$~'
请参见regex demo
详细信息
^
-字符串的开头[^.]*
-匹配.
以外的0+个字符的negated character class \.html
-一个.html
子字符串$
-字符串的结尾。答案 1 :(得分:0)
使用以下正则表达式
^([^.]*)\.[^.]*$
它匹配仅包含一个点的字符串-示例here-说明
[^.]*
匹配除点以外的任何字符对于仅匹配的html文件,请使用^([^.]*)\.html*$
答案 2 :(得分:0)
您的正则表达式不起作用,因为您是在说下一个字符不应在其中包含句点(即(?!\..*)
),而您立即说它们应该在其中(即.html
)。
唯一可以接受的解决方案如下:
\.\w+\.html$(*SKIP)(*F)|\.html$
正则表达式live demo
正则表达式细目:
\.\w+\.html$
匹配具有前面扩展名的.html
文件(*SKIP)(*F)
扔掉|
或\.html$
匹配没有扩展名的.html
文件这不允许.{alphanum + _}.html
之类的
.php.html
.mp4.html
.j_p_g.html
但是不会同时弄乱不同的文件名,并且允许使用以下模式:
a.file.name@user.html