簡體   English   中英

用正則表達式拆分表達式(PHP)

[英]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.

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