正则表达式否定前缀和后缀

时间:2014-05-10 00:15:34

标签: php regex preg-match pcre

我有这些字符串,例如:

download-google-chrome-free
download-mozilla-firefox-free

还有这些字符串:

google-chrome
mozilla-firefox

我的前缀是download-,我的后缀是-free,我需要一个正则表达式来捕获单词google-chrome,如果输入字符串没有{{1} }和download-前缀和后缀,捕获的组是字符串本身。

String 1 = download-google-chrome-free(带前缀和后缀)

-free

字符串2 = google-chrome(没有前缀和后缀)

String 1 Group 1 = download-
String 1 Group 2 = google-chrome
String 1 Group 3 = -free

你能做到吗?我使用String 2 Group 1 = '' (empty) String 2 Group 2 = google-chrome (empty) String 2 Group 3 = '' (empty) 使用PHP

1 个答案:

答案 0 :(得分:1)

preg_match('/(download-)?(google-chrome|mozilla-firefox)(-free)?/', $string, $match);

?表示之前的组是可选的。如果字符串中的前缀或后缀不是,则$match中的那些捕获组将为空。

如果您实际上并不希望返回带有可选前缀和后缀的组,请将?:放在组的开头,将它们设为非捕获组:

preg_match('/(?:download-)?(google-chrome|mozilla-firefox)(?:-free)?/', $string, $match);

现在$match[1]将包含您想要的浏览器名称。