簡體   English   中英

PHP preg_match匹配錯誤的字符串

[英]PHP preg_match Matching Wrong String

我有一個正則表達式:

/\/(register)(?:\/activate\/(.{16}))?(?:\/(student|teacher|org))?\/?$/

正確的匹配字符串:

/register
/register/student
/register/activate/1234567890123456/

不匹配問題:

/register/register/register/register/student/

當在PHP中使用preg_match時,以上內容仍然匹配。 有其他選擇嗎?

我也嘗試將“寄存器”限制為1:

\/((?:register){1})(?:\/activate\/(.{16}))?(?:\/(student|teacher|org))?\/?$

沒運氣。

使用Debuggex不匹配,但是使用http://www.phpliveregex.com/匹配

Debuggex演示

在字符串的開頭使用^錨定。

/^\/(register)(?:\/activate\/(.{16}))?(?:\/(student|teacher|org))?\/?$/
 * here

一開始不使用錨,實際上是如下所示的匹配:

/register/register/register/register/student/
                           ^----------------^

問題是您只想使用$來匹配字符串的結尾。 這意味着正則表達式將匹配您的表達式,而不管它之前是什么。

具有表達式/bob$/將匹配以bob結尾的所有內容,例如big bob 這就是這里正在發生的事情。

您需要通過為前綴加上^來強制preg_match匹配整個字符串(即開頭和結尾)。

/^\/(register)(?:\/activate\/(.{16}))?(?:\/(student|teacher|org))?\/?$/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM