簡體   English   中英

在PHP中使用多個正則表達式

[英]Using Multiple Regular Expressions in PHP

我需要編寫一個將計算以下條件的正則表達式:

  • 2個連續的小寫字符
  • 至少1位數字
  • 至少1個大寫字符
  • 2個連續的相同標點字符

例如,字符串“ aa1A !!” 應該匹配,“ !! A1aa”也應該匹配。

我寫了以下正則表達式:

'/(?=([a-z]){2,})(?=[0-9])(?=[A-Z])(?=(\W)\1)/'

我發現每個表達方式都有效,但是我努力將它們組合在一起。 我想念什么?

首先,必須固定模式,以確保僅從字符串開頭的位置開始測試前瞻。 然后,由於您的字符可以出現在字符串中的任何位置,因此您需要使用.*開始在lookahead內部的子模式。

\\W是非單詞字符的字符類(不是[A-Za-z0-9_]所有字符,包括空格,控制字符,帶重音的字母...)。 IMO, \\pP[[:punct:]]更合適。

/^(?=.*[a-z]{2})(?=.*[0-9])(?=.*[A-Z])(?=.*(\pP)\1)/

關於使4個模式代替1個模式的想法,它看起來像是個好主意,嘗起來像是個好主意,但是它沒用且速度較慢。 但是,如果您想知道什么特定規則失敗,可能會很有趣。

暫無
暫無

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

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