我正在尝试编写一些替换正则表达式,如果它尚不存在,会将区域设置代码插入到网址中。我使用负前瞻模式来实现下面显示的
(^http://.*?/)(?!en/|\w{2}\-\w{2}/)(?<path>.*?$)
所以我希望将所有内容与第一个正斜杠匹配,然后检查区域设置是否不存在。语言环境可以是我们网站中的“en”或通常的“en-GB”样式区域代码。目前,此模式将执行以下操作:
http://www.mywebsite.com/location/index.html =&gt; http://www.mywebsite.com/en/location/index.html http://www.mywebsite.com/en/location/index.html =&gt; http://www.mywebsite.com/en/en/location/index.html
使用以下替换模式:$ 1en / $ {path}
所以第一个工作正常,但第二个匹配,即使我不想要它然后放入语言环境代码。
我想做的是什么,听起来应该是这样。感谢您提前提供任何帮助。
答案 0 :(得分:1)
尝试将第一个.*?
替换为[^/]*
。
例如:
^(http://[^/\s]*/)(?!en/|\w{2}-\w{2}/)(?<path>\S*)$
答案 1 :(得分:1)
“我希望将所有内容与第一个正斜杠匹配,然后检查区域设置是否存在。”
这(^http://.*?/)(?!en/|\w{2}\-\w{2}/)(?<path>.*?$)
所做的事情与所有事情相符
在第一个正斜线上,前面有一个en
。
与第一个正斜杠匹配不同,如果en
在它前面则失败。
正则表达式将始终尝试以最短的路径成功。即使它使用?不合情理,它实际上会一直持续到它满足锚点或条件尾随它。在这种情况下,它在前面找到了一个没有en
的正斜杠:www.mywebsite.com/en/
,这不是第一个正斜杠,它是第二个斜杠。
这是一个问题,它一直在发生,是未来需要注意的事项
因此,目标是限制它匹配第一个正斜杠:[^/]*/
答案 2 :(得分:0)
请改用此正则表达式:
^(http://[^\/]+/)(?!en/|\w{2}\-\w{2}/)(?<path>.*)$