用Bash正则表达式匹配单词边界

舍拉夫

我想在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).*$

真的所有我想知道的是测试字符串的话一个是在这个正则表达式描述的词之一(720p1080pbrrip,...)。边界一词似乎有问题。

我使用的测试是[[ $name =~ $re ]] && echo "yes"哪里$name是任何字符串,$re是我的正则表达式。

我想念什么?

查尔斯·达菲

\b是PCRE扩展;它在POSIX ERE(扩展的正则表达式)中不可用,这是=~bash运算符支持的最小语法集[[ ]](单个操作系统可能具有扩展此语法的libc;在这种情况下,这些扩展将在此类操作系统上可用,但并非在支持bash的所有平台上都可用)。

作为基准,\b扩展实际上并没有很大的表达能力-您可以编写将其用作等效ERE的任何PCRE。不过,更好的是退后一步并质疑基本假设:当您说“单词边界”时,您真正的意思是什么?如果您所关心的只是如果它以空格或字符串的开头或结尾开始和结束,那么您根本不需要\b运算符:

(^|[[:space:]])((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))($|[[:space:]])

请注意,我取出了initial^.*和end .*$,因为在进行其他未匹配的匹配时,这些构造是自负的。.*使^立即之前没有意义,同样,.*只是之前的最后$


现在,如果你想要一个确切相当于\b当在序列的开始单词字符之前放置,然后我们得到更多的东西一样:

(^|[^a-zA-Z0-9_])

...并且同样地,当在序列末尾紧接单词字符之后:

($|[^a-zA-Z0-9_])

这两种情况都是简陋的情况-在其他情况下,模拟\bERE中的行为可能会更加复杂-但它们是您的问题似乎只出现的情况。

请注意,的某些实现\b会更好地支持非ASCII字符集,因此使用[^[:alnum:]_]而不是可以更好地进行描述[^a-zA-Z0-9_],但是此处并没有明确定义您来自哪个实现或与其进行比较。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用Bash正则表达式匹配单词边界

来自分类Dev

正则表达式用括号将单词边界字符串匹配

来自分类Dev

正则表达式单词边界

来自分类Dev

用正则表达式匹配单词(Python 3)

来自分类Dev

匹配单词的正则表达式

来自分类Dev

正则表达式单词匹配

来自分类Dev

正则表达式与单词边界之间的哈希字符不匹配

来自分类Dev

iOS-正则表达式以匹配单词边界,包括下划线

来自分类Dev

js正则表达式不匹配单词边界\ b

来自分类Dev

js正则表达式与单词边界不匹配\ b

来自分类Dev

匹配单词-单词或单词的正则表达式

来自分类Dev

正则表达式集中的单词边界或数字

来自分类Dev

正则表达式中跳过单词边界

来自分类Dev

正则表达式单词边界混乱

来自分类Dev

正则表达式的单词边界在'-'处中断

来自分类Dev

正则表达式PHP单词边界?

来自分类Dev

带有单词边界的PHP正则表达式

来自分类Dev

正则表达式@单词边界中的字符

来自分类Dev

正则表达式单词边界混乱

来自分类Dev

正则表达式与单词边界的并集

来自分类Dev

Bash正则表达式匹配@

来自分类Dev

用单词的修改版本替换正则表达式匹配的单词

来自分类Dev

Java正则表达式边界匹配吗?

来自分类Dev

正则表达式以匹配单元格边界

来自分类Dev

正则表达式匹配其边界

来自分类Dev

Java正则表达式边界匹配器

来自分类Dev

正则表达式匹配包含单词perl的“单词”

来自分类Dev

正则表达式以匹配单词边界,但如果单词具有任何前缀或后缀,则将其排除

来自分类Dev

正则表达式以匹配单词边界,但如果单词具有任何前缀或后缀,则将其排除