正则分组中能否结合负向前瞻与其他条件处理URL匹配?
处理URL末尾多余横杠的正则方案
调整后的正则
直接用这个正则就能覆盖你提到的所有场景:
(/(?:[^/)-]|-+(?!/?$))*)
如果是要提取有效部分,也可以用更简洁的写法:
(/[^/)]*?)(?=-*\/?$|$)
为啥能解决问题
原来的正则会把末尾的-也当成有效内容,现在通过负向前瞻(?!/?$)来判断:如果连续的-后面直接跟着/或者到字符串结尾,就不把这些-算进匹配内容里。
[^/)-]负责匹配正常的字符(包括中间的-)|-+(?!/?$)允许匹配中间的连续-,但排除末尾的无效-
SQL里怎么用(以MySQL为例)
提取清洗后的URL
SELECT REGEXP_SUBSTR(your_url_column, '(/(?:[^/)-]|-+(?!/?$))*)') AS cleaned_url FROM your_table;
这个语句会把/this-is-my-test-string-和/this-is-my-test-string-/都转换成/this-is-my-test-string。
和参考表匹配
如果是要关联参考表的规范URL,可以这么写:
SELECT t.* FROM source_table t JOIN reference_table r ON REGEXP_SUBSTR(t.url_column, '(/(?:[^/)-]|-+(?!/?$))*)') = r.standard_url;
内容的提问来源于stack exchange,提问作者Simon Cook
相关产品推荐
相关产品推荐

