【发布时间】:2014-12-15 01:53:27
【问题描述】:
我想在 bash 中匹配以下表达式:
^.*(\b((720p)|(1080p)|(((br)|(hd)|(bd)|(web)|(dvd))rip)|((x|h)264)|(DVDscr)|(xvid)|(hdtv)|(ac3)|(s[0-9]{2}e[0-9]{2})|(avi)|(mp4)|(mkv)|(eztv)|(YIFY))\b).*$
我真的只想知道测试的字符串中的一个单词是否是这个正则表达式中描述的单词之一(720p,1080p,brrip,...)。而且边界这个词似乎有问题。
我使用的测试是[[ $name =~ $re ]] && echo "yes",其中$name 是任何字符串,$re 是我的正则表达式。
我错过了什么?
【问题讨论】:
-
单引号——如
re='yadda yadda yadda'——不会破坏你的反斜杠。 -
我不理解反对意见:第一行中接受的答案明确说明了为什么需要回答。 \b 是 PCRE 扩展;它在 ERE 中不可用,bash 的 [[ ]] 语法中的 =~ 运算符使用它。
-
补充一点,
Bash-3.0到Bash-3.1肯定使用了 PCRE 语法,可以在Bash-4.0和更高版本中使用shopt -s compat31启用。 -
忽略我之前的评论。看起来接受的答案让我感到困惑。用答案修复它。
-
@Samveen,嗯?让您失望的不是 PCRE 语法,而是 ERE 的供应商扩展添加了源自 PCRE 的(单一的、特定的)功能。 Bash 使用本地操作系统的 libc,因此它隐式选择了您的操作系统供应商选择提供的所有扩展。
标签: regex bash word-boundary