[英]How to only allow certain number of forward slashes using regular expression?
我正在路由我的應用程序,我想在tags/
的目錄路徑之后只允許最多2個目錄子路徑。 連字符和alnums是唯一允許的字符。
以下將全部驗證,下面的粗體將作為單個匹配返回到路由器:
如果有超過2個子路徑(或者說2個或更多斜杠,換句話說),路由器應該不返回任何匹配項。
我的服務器在尾部斜杠上重定向(到非尾部斜杠URL),因此不需要考慮它們。
我目前正在使用tags/([\\w+\\-\\/]+)$
但是這將允許無限多個子路徑,並且在路由器返回匹配后我被迫檢查子路徑長度(正斜杠計數)。
我不確定如何在我寫的字符集中只允許0或1個正斜杠,同時可能跟隨單詞字符,然后將它們全部作為單個匹配返回。
這可能是正則表達式嗎?
Barmar的解決方案完美地回答了你的問題...這只是考慮路徑表達式中的尾部斜線的另一個版本:
(tags\/[-\w]+\/?(?:[-\w]+)?(?<!\/)\/?)$
這個正則表達式應該這樣做:
tags/[\w\-]+(/[\w\-]+)?$
它允許在tags/
后面加一個單詞,后跟一個可選的斜杠和另一個單詞。
在字符類中你不需要+
- 你說唯一允許的字符是alnums和連字符。
完全按照你所說的做,匹配“tags /”后跟“file”或“file / file”。 粗略地說,“tags /(file | file / file)$”。
簡單:
^tags(?:/[\\w+\\-]+){1,2}$
這是一個經過測試的PHP命令行腳本,它實現了正則表達式的注釋版本:
<?php // test.php Rev:20130823_2100
$text = 'tags/how-to-bake/magic_brownies';
$re = '% # Match path having two or three path segments.
^ # Anchor to start of string.
tags # Hard code first path segment.
(?: # Group 1 or 2 additional segments.
/ # Path segments separated by /
[\w+\-]+ # Path segment is one or more [A-Za-z0-9_-].
){1,2} # End group of 1 or 2 additional segments.
$ # Anchor to end of string.
%ix';
if (preg_match($re, $text, $matches)) {
echo("Successful match");
} else {
echo("No match");
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.