[英]Splitting expression by regular expressions (PHP)
我想在部分“ 33”,“ A”,“ 5”上分割字符串:“ 33A / 5”。
在php中是否可以將一些正則表達式寫為: "/^(\\d+) (\\D) \\/? (\\d+)/"
,其中括號( exp )
中的表達式變為單獨的部分?
您可以像這樣使用preg_match
:
preg_match("/^(\d+) (\D+) \/? (\d+)/x", $text, $match);
$match
將是一個具有單獨匹配項的數組。
x
修飾符將忽略正則表達式中的空格; 否則,請勿放置空格:
preg_match("/^(\d+)(\D+)\/?(\d+)/", $text, $match);
也可以使用單個preg_split
調用來完成:
$chunks = preg_split(
'/(\d+|[^\/\d]+)\/?/',
'33A/5',
-1,
PREG_SPLIT_DELIM_CAPTURE |
PREG_SPLIT_NO_EMPTY
);
var_dump($chunks);
轉儲:
array(3) { [0]=> string(2) "33" [1]=> string(1) "A" [2]=> string(1) "5" }
這種方法的工作原理幾乎與此[答案相同]。 該表達式匹配/
以外的所有內容,從而有效地將所需數據轉換為定界符。 因為我們需要定界符,所以必須使用PREG_SPLIT_DELIM_CAPTURE
常量。
當然,因為它們是定界符,所以它將在那些子字符串上分割字符串,並且由於定界符之間沒有任何內容,因此每個分割點最終都將為空值。 這就是為什么我還要使用PREG_SPLIT_NO_EMPTY
常量,使用按位|
操作者
表達式本身:
(
:開始匹配組 \\d+
匹配一個或多個數字,貪婪->組中! |
:或者,如果\\d+
無法匹配,請使用: [^\\/\\d]+
:組中不是/
或數字->的任何char的貪婪匹配 )\\/?
:封閉組,匹配可選 /
,在組=>之外,因此它不與捕獲的定界符匹配
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.