我正在尝试在文本中查找所有部分(并用其他内容替换)
(对于您的信息,我正在搜索并替换目录和文件名,因此应排除“。”和“..”。)
这是我想出的正则表达式:
/(?!\.|\.\.)([^/]+)/
第二部分
([^/]+)
匹配每个字符序列,但不包括'/'。不需要字符限制,我只是在解释输入内容。
第一部分
(?!\.|\.\.)
使用否定的超前断言来排除字符串“。”。和 '..'。
但是,这似乎在mb_ereg_replace()的PHP中不起作用。
有人可以帮我吗?我看不到我的正则表达式有什么问题。
谢谢你。
最佳答案
POSIX正则表达式可能不支持否定先行。 (我可能是错的)
无论如何,由于PCRE regex通常比POSIX快,我认为您可以使用同一功能的PCRE版本,因为PCRE还支持utt8并使用u
标志。
考虑以下代码作为替代:
preg_replace('~/(?!\.|\.\.)([^/]+)/~u', "", $str);
编辑:更好的是使用:
preg_replace('~/(?!\.)([^/]+)/~u', "", $str);