正则表达式唯一结果
Regular Expression unique result
我有一个正则表达式
(?:(da|en-gb|en|\*))(?!.*)
我想得到的是匹配独特的语言类型;
比如我给enenen-gben
匹配的部分是en-gben
,这就是我想要的,因为前两个en
重复了。
然而当我给 enenenen-gb
匹配部分是 en-gb
,我得到的是 enen-gb
,我认为原因是 en
是一个子串en-gb
个。但我不知道如何解决它。谁能给我一个更好的 RE?非常感谢
===================更新==============
题目背景是想设计一个accept-language的http header的Regex。所以我在这里使用(?:(da|en-gb|en|\*))(?!.*)(;q=(1|0(\.\d+)?))?(,(da|en-gb|en|\*)(;q=(1|0(\.\d+)?))?)*
da
、en-gb
、en
只是一些示例。要知道,每种语言都可以分配一个值q来代表它的优先级。而且我不希望出现任何重复的语言类型。这就是我想要的。
我能想到的一个修复方法是将 en
更改为 en-us
,因为其他语言类型是 en-gb
,这是英式英语,之前的应该是美式英语。
如果您同意,那么这可能会起作用。
正则表达式: (en-gb|en-us|da)(?!)(en-gb|en-us|da)
您可以在反向引用之后使用 (?!-)
否定前瞻来限制匹配,使其在重复的语言名称之后没有连字符:
(?:(da|en-gb|en|\*))(?!.*(?!-))(?:;q=(?:1|0(\.\d+)?))?(?:,(da|en-gb|en|\*)(?!.*(?!-))(?:;q=(?:1|0(?:\.\d+)?))?)*
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
如果有-
,则不会匹配此子串
我有一个正则表达式
(?:(da|en-gb|en|\*))(?!.*)
我想得到的是匹配独特的语言类型;
比如我给enenen-gben
匹配的部分是en-gben
,这就是我想要的,因为前两个en
重复了。
然而当我给 enenenen-gb
匹配部分是 en-gb
,我得到的是 enen-gb
,我认为原因是 en
是一个子串en-gb
个。但我不知道如何解决它。谁能给我一个更好的 RE?非常感谢
===================更新==============
题目背景是想设计一个accept-language的http header的Regex。所以我在这里使用(?:(da|en-gb|en|\*))(?!.*)(;q=(1|0(\.\d+)?))?(,(da|en-gb|en|\*)(;q=(1|0(\.\d+)?))?)*
da
、en-gb
、en
只是一些示例。要知道,每种语言都可以分配一个值q来代表它的优先级。而且我不希望出现任何重复的语言类型。这就是我想要的。
我能想到的一个修复方法是将 en
更改为 en-us
,因为其他语言类型是 en-gb
,这是英式英语,之前的应该是美式英语。
如果您同意,那么这可能会起作用。
正则表达式: (en-gb|en-us|da)(?!)(en-gb|en-us|da)
您可以在反向引用之后使用 (?!-)
否定前瞻来限制匹配,使其在重复的语言名称之后没有连字符:
(?:(da|en-gb|en|\*))(?!.*(?!-))(?:;q=(?:1|0(\.\d+)?))?(?:,(da|en-gb|en|\*)(?!.*(?!-))(?:;q=(?:1|0(?:\.\d+)?))?)*
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
如果有-
,则不会匹配此子串