簡體   English   中英

使用preg_match分割字符串

[英]Split String With preg_match

我有字符串:

$productList="
Saluran Dua(Bothway)-(TAN007);
Speedy Password-(INET PASS);
Memo-(T-Memo);
7-pib r-10/10-(AM);
FBI (R/N/M)-(Rr/R(A));
";

我想要這樣的結果:

Array(
[0]=>TAN007
[1]=>INET PASS
[2]=>T-Memo
[3]=>AM
[4]=>Rr/R(A)
);

我用了 :

$separator = '/\-\(([A-z ]*)\)/';
preg_match_all($separator, $productList, $match);
$value=$match[1];

但是結果是:

Array(
[0]=>INET PASS
[1]=>AM
);

必須有錯誤的代碼,有人可以幫助嗎?

您的regex不包括您要捕獲的文本中可能出現的所有字符。

正確的regex為:

$match = array();
preg_match_all('/-\((.*)\);/', $productList, $match);

說明 (從內到外):

  • .*匹配任何東西;
  • (.*)是上面括號中的表達式,用於捕獲$match[1]
  • -\\((.*)\\); 在上下文中是上面的內容:如果在-(之前加);之后匹配,則匹配); ; 括號轉義為使用其字面值而不是其特殊的regex解釋;
  • 無需逃脫-在正則表達式中; 僅當在字符范圍( [AZ] ,fe)中使用它時,它才具有特殊的解釋,但是即使在連字符( - )緊接在[]之前,連破折號( - )也沒有特殊含義; 例如[-AZ]表示:破折號( - )或任何大寫字母( AZ )。

現在, print_r($match[1]); 看起來像這樣:

Array
(
    [0] => TAN007
    [1] => INET PASS
    [2] => T-Memo
    [3] => AM
    [4] => Rr/R(A)
)

試試這個ReGex

$separator = '#\-\(([A-Za-z0-9/\-\(\) ]*)\)#';

對於第一行,您需要0-9

對於第3行,您需要-in和

在最后一行中,您需要()試試這個

 #\-\(([a-zA-Z/0-9(\)\- ]*)\)#

暫無
暫無

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

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