REGEX_MATCH 匹配 PG 而不是 PG13,反之亦然
Posted
技术标签:
【中文标题】REGEX_MATCH 匹配 PG 而不是 PG13,反之亦然【英文标题】:REGEX_MATCH to match PG and not PG13 and vice versa 【发布时间】:2016-08-15 10:53:42 【问题描述】:我正在使用 bigquery,需要为评级为 PG 的电影匹配 PG,为评级为 PG 的电影匹配 PG13。
我正在努力寻找 BQ 实施 REGEX_MATCH 的良好来源,并希望得到一些帮助。
所以,为了找到 PG,我尝试了 SELECT REGEX_MATCH(PC_Rating, r'PG')
,它找到了正确的值,但是当我尝试排除 PG13 时,如下SELECT REGEX_MATCH(PC_Rating,r'PG![0-9]2')
或 SELECT REGEX_MATCH(PC_Rating,r'PG^[0-9]2')
它与 PG 不匹配。
我的专栏有 PG 或 PG13*,其中 * 可以是以下 [VSLNP] 中的一个或多个。
谢谢。
【问题讨论】:
试试SELECT REGEX_MATCH(PC_Rating, r'PG$')
命令。
$ 字符有什么作用。谢谢这个作品!
【参考方案1】:
在正则表达式中使用$
进行完全匹配。
SELECT REGEX_MATCH(PC_Rating, r'PG$')
r'PG$'
将匹配所有以PG
结尾的字符串。您可以通过在开头添加行锚^
的开头来进行更精确的匹配。
SELECT REGEX_MATCH(PC_Rating, r'^PG$')
【讨论】:
谢谢,出于兴趣,什么是 NOT 运算符。例如!^PG
For 不以 PG 开头。我见过!
和^
"for 不以PG开头",^(?!PG)
,不知道GBQ是否支持负前瞻..【参考方案2】:
要匹配评级列表中的“PG”,您可以在下面使用。 它不依赖于该评级在列表中的位置(开始、结束或中间......)
WHERE REGEXP_MATCH(PC_Rating, r"\bPG\b")
注意,REGEXP_MATCH 是一个相对昂贵的函数——所以如果“RG”值是你在列中期望的唯一值——你应该使用
WHERE PC_Rating = "PG"
为了匹配PG13*, where * can be one or many of the following [VSLNP]
,你可以在下面使用
WHERE REGEXP_MATCH(PC_Rating, r"\bPG13(V|S|L|N|P)*\b")
【讨论】:
以上是关于REGEX_MATCH 匹配 PG 而不是 PG13,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess RewriteRule 到路径而不更改 URL