簡體   English   中英

改善regex pcre php

[英]improve regex pcre php

在我的項目(php)中,我得到了一些像這樣的正則表達式(pcre):

preg_match('/[\\s^0-9]{0,1}([0-9]{2})[\\s^0-9]{0,1}/',$chanson['nom'],$resultPreg1)

此正則表達式捕獲兩個可以用一個空格定界或不能定界的數字,並且不能用數字定界。 我想做的是,在開頭有一個空格(沒有數字),在結尾有一個空格(沒有數字)。 但是它必須至少有一個定界符。

我怎樣才能做到這一點 ?

您只需要將其拆分並測試每種情況:

/\s\d{2}\D|\D\d{2}\s/

這將匹配一個空格,兩個數字和任何非數字字符一個非數字字符,兩個數字和一個空格。

注意: \\d是一個數字,等效於[0-9] \\D是一個非數字,等效於[^0-9]

上述正則表達式要求數字的每一側至少要有一個非數字。 另外,如果您使用.11 22.這樣的模式,則它不會同時匹配兩個數字,因為第一次匹配會占用空間。 如果這是一個問題,則可以使用環顧四周:

/\s\d{2}(?!\d)|(?<!\d)\d{2}\s/

這匹配一個空格,然后是兩個數字,后跟另一個數字, 或者兩個數字前沒有數字,后跟一個空格。

(?!...)是負面的超前預測。 這意味着“比賽之后不能跟隨”。

(?<!...)為負向后看,表示“匹配項不能以此為開頭”。

您不能在單個方括號中混合使用否定和肯定字符類。 可以將\\s|[^0-9]寫入“空格”或“非數字”。 但是空格不是數字,因此無需專門將其放入,只需[^0-9]就足夠了。 您的“零或一個”語法{0,1}在技術上是正確的,但同樣的事情更加簡潔的語法: ?

preg_match('/[^0-9]?([0-9]{2})[^0-9]?/',$chanson['nom'],$resultPreg1)

您幾乎可以在數字周圍使用斷字來獲得所需的內容,只是找不到在“ abc23def”之類的字母中嵌入的數字。

preg_match('/\b([0-9]{2})\b/',$chanson['nom'],$resultPreg1)

暫無
暫無

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

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