簡體   English   中英

PHP正則表達式查找字符串模式

[英]php regex find string patterns

您好,我對regex不好,如果有人可以幫助我,我將不勝感激。 我需要一個正則表達式函數,該函數將查找以:開頭的所有模式,並緊隨其后的是至少1個字母,也許還有數字,直到下次出現符號為止。

例如:hi/:Username@asdfasfasdf:asfs,asdfasfasfs:asdf424/asdfas

如您所見,這里有4種情況。 我想要實現的是最終得到一個包含以下內容的數組:

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

PS。 字母可能使用英語以外的其他語言。

無故拒絕投票...恭喜

這是我到目前為止使用的,但是我想使用正則表達式會更容易

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;

}

由於要支持非ASCII字符,因此最好在u開關中使用\\p{L}

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

輸出:

array(4) {
  [0]=>
  string(4) "hi45"
  [1]=>
  string(8) "Username"
  [2]=>
  string(10) "asfsŚAAÓ"
  [3]=>
  string(7) "asdf424"
}
/:([a-zA-Z][a-zA-Z0-9]*)/
  • 您至少需要一個字母[a-zA-Z]
  • 然后是任意有效字符序列(字母,數字)[a-zA-Z0-9] *

觀看演示

<?php
    $string = ":hi/:Username@asdfasfasdf: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
)

暫無
暫無

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

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