【发布时间】:2014-07-20 11:51:43
【问题描述】:
我正在尝试使用正则表达式验证查询字符串。请注意,我不是要匹配这些值,而是验证它的语法。我这样做是为了练习正则表达式,所以我会感谢帮助而不是“使用这个库”,尽管看看它是如何在一个库中完成的会对我有所帮助,所以如果你有一个,请告诉我。
所以,这将是先决条件:
- 必须以问号开头。
- 它可能包含带或不带值的键,由等号分隔,对由 & 号分隔。
我已经走得很远了,但是我在匹配正则表达式时遇到了麻烦,即等号和 & 符号必须按特定顺序排列,而不必重复匹配组。这是我到目前为止所得到的:
#^\?([\w\-]+((&|=)([\w\-]+)*)*)?$#
它正确匹配?abc=123&def=345,但也错误匹配例如?abc=123=456。
我可能会矫枉过正,做一些类似...
/^\?([\w\-]+=?([\w\-]+)?(&[\w\-]+(=?[\w\-]*)?)*)?$/
...但我不想重复相同的匹配组。
我如何告诉正则表达式,值之间的分隔符必须在 & 和 = 之间迭代,而不重复匹配组或灾难性的回溯?
谢谢。
编辑:
我想澄清一下,这并不适用于现实世界的实现;为此,应使用您的语言中最有可能可用的内置库。问这个问题是因为我想提高我的正则表达式技能,而解析查询字符串似乎是一个有益的挑战。
【问题讨论】:
-
这个问题在谷歌的“查询字符串正则表达式”搜索中弹出。我必须注意,即使您仅限于基于正则表达式的解决方案,这里发生的事情不应实时使用,因为它缺少this 点并且谁知道还有什么(我不知道,但那里有很多我不知道的规格)。
标签: regex validation expression