我的情况如下。我们的系统需要从作为查询参数传入的字符串中提取过滤器,但如果字符串格式不正确,也会抛出404错误。因此,让我们将以下三个字符串作为一个例子:
根据应用程序要求,只有#3匹配为"有效"串。所以我当前的正则表达式匹配/([a-z]+)(\d+)/
。但这也与#1匹配,如果不是完全匹配,但它仍然匹配。
我的问题因此是双重的 - 我需要2个模式,1个匹配仅此列表中的第3个字符串,另一个匹配"不可接受的"字符串1和2.我相信必须有一些方法来否定"一个模式(所以我在技术上只需要一个模式,我假设),但我不确定如何做到这一点。
感谢您的帮助!
修改
为了清楚起见,让我解释一下。 "过滤器参数"此处的结构采用以下结构 - 1或2个字母,后跟一些好的数字。这种结构可以重复多次。例如,有效的过滤字符串可以是
无效的字符串可能是
答案 0 :(得分:4)
澄清问题后:
^([a-zA-Z]{1,2}\d+)*$
说明:
[a-zA-Z]
- 小写或大写字母{1,2}
- 其中一两个\d+
- 一个或多个数字()*
- 整个事情重复了很多次^$
- 将 start (^
)中的整个字符串与 end ($
)答案 1 :(得分:2)
答案 2 :(得分:1)
/^(?:(?:[a-z]+)(?:\d+))*$/
你是赫拉,男人。只需要一遍又一遍地重复这种模式直到结束。
将*
更改为+
以拒绝空字符串。
哦,你有更具体的要求,试试这个:
/^(?:[a-z]{1,2}\d+)*$/
细分:
^ - Matches the start of the string an anchor
(?: - start a non-capturing group
[a-z] - A to Z. This you already had.
{1,2} - Repeat 1 or 2 times
\d+ - a digit or more You had this, too.
)* - Repeat that group ad nauseum
$ - Match the end of the string
答案 3 :(得分:0)
如果你只想要字符串末尾的数字,那么
/\d$/
会这样做。 \d
= digit,$
=字符串结尾。