2013-09-26 50 views
0

你好我不擅長正則表達式,我真的很感激,如果有人可以幫助我。 我需要一個正則表達式函數,它會查找所有以下列形式開頭的模式:以及後面至少有一個字母,也許數字直到下一次出現符號。php正則表達式找到字符串模式

例如:hi/:[email protected]:asfs,asdfasfasfs:asdf424/asdfas

正如你可以看到這裏有4個出現次數。 我想要實現的是用含有一個數組結束:

['hi','Username','asfs','asdf424'] 

PS。信件可能用英文以外的其他語言。

Downvoting無故...恭喜

這是我使用的是什麼,到目前爲止,但我想這將是與正則表達式更容易

public function decodeRequest() { 

    $req_parts = $this->getRequestParams(); // <-array of strings 


    $params = array(); 

    for ($i=0; $i < count($req_parts); $i++) { 

     $starts = mb_substr($req_parts[$i], 0, 1, 'utf-8'); 
     $remains = mb_substr($req_parts[$i], 0, mb_strlen($req_parts[$i]), 'utf-8'); 

     if ($req_parts[$i] == ':') { 
      array_push($params,$remains); 
     } 


    } 

    return $params; 

} 
+0

查看最新更新 – Syd

回答

2

既然你要對非ASCII字符的支持,最好是使用\p{L}u開關:

$s = ':hi45/:[email protected]:asfsŚAAÓ,asdfasfasfs:asdf424/asdfas'; 
if (preg_match_all('/:([\p{L}\d]+)/u', $s, $arr)) 
    var_dump($arr[1]); 

OUTPUT:

array(4) { 
    [0]=> 
    string(4) "hi45" 
    [1]=> 
    string(8) "Username" 
    [2]=> 
    string(10) "asfsŚAAÓ" 
    [3]=> 
    string(7) "asdf424" 
} 
+1

該死的兄弟你幫我在其他正則表達式問題有關htaccess乾淨網址重寫。 :)救了我的屁股兩次,再次感謝你! – Syd

+0

感謝您記住我,並很高興這一切都爲您解決。 – anubhava

+0

我可以問一些額外的情況,以防我需要它。我們如何修改這個正則表達式來工作,直到下一次發生/或 - 而不是任何符號? – Syd

1
/:([a-zA-Z][a-zA-Z0-9]*)/ 
  • 你至少需要[a-zA-Z]
  • 然後任何有效字符序列(字母,數字)[a-zA-Z0-9] *

See demo

<?php 
    $string = ":hi/:[email protected]:asfs,asdfasfasfs:asdf424/asdfas"; 
    preg_match_all('/:([a-zA-Z][a-zA-Z0-9]*)/', $string, $matches); 
    print_r($matches[1]); 

輸出:

Array 
(
    [0] => hi 
    [1] => Username 
    [2] => asfs 
    [3] => asdf424 
) 
+0

我應該如何修改這個以便在:符號後至少有一個字母? – Syd

+0

@PanagiotisGeorgeRaditsas查看更新。 – revo

相關問題