正则表达式为可选,最大限制为1

时间:2016-05-23 13:15:39

标签: regex

我是正则表达式的新手。面对一些问题,同时将一个表达式作为可选项,如果它存在则不应重复。在下面的例子中,我希望%23是可选的,如果它发生,那么它不应该重复。但在下面的情况下,它适用于可选项,但不适用于重复案例。

即使我把字符串作为:

,它也会给我true
-113%23%2313113098A%2F-- 

有人可以建议如何使其成为可选而非重复。这是我的正则表达式:

(%23)?([0-9]|[A-Z]|%2F|-).*$

1 个答案:

答案 0 :(得分:2)

您可以使用否定前瞻来避免匹配public function handle($request, Closure $next, $guard = null) { if(Auth::guard($guard)->guest()) { return redirect()->guest('auth/login'); } return $next($request); } 的重复实例:

%23

<强>解体:

^(?:[0-9]|[A-Z]|%2F|[-%])(?!(?:.*?%23){2}).*$

RegEx Demo

但是,如果要求避免连续重复,请使用:

(?!             # start negative lookahead
(?:.*?%23){2}   # match 0 or more chars followed by %23, {2} matches 2 repeats
)               # end lookahead