簡體   English   中英

嘗試在 PHP 中創建與模式內的模式匹配的正則表達式

[英]Trying to create a regex in PHP that matches patterns inside a pattern

我見過一些正則表達式示例,其中字符串是“測試字符串:Group1Group2”,並使用 preg_match_all() 匹配標簽內存在的文本模式。

但是,我想做的有點不同,我的字符串是這樣的:

“一些 t3xt../s8fo=123,sij(variable1=123,variable2=743,variable3=535)”

我想要做的是匹配括號內存在的諸如'variable = 123'之類的部分。

我到目前為止是這樣的:

if( preg_match_all("/\(([^\)]*?)\)"), $string_value, $matches )
{
   print_r( $matches[1] );
}

但這只是捕獲括號內的所有內容,並且不匹配其他任何內容。

編輯:所需的 output 將是:

   "variable1=123"
   "variable2=743"
   "variable3=535"

我得到的 output 是:

   "variable1=123,variable2=743,variable3=535"

我會這樣做:

preg_match("/\(([^\)]+)\)/", $string_value, $matches);
$result = explode(",", $matches[1]);

如果您的最終結果是 key => value 的數組,那么您可以將其轉換為查詢字符串:

preg_match("/\(([^\)]+)\)/", $string_value, $matches);
parse_str(str_replace(',', '&', $matches[1]), $result);

產生:

Array
(
    [variable1] => 123
    [variable2] => 743
    [variable3] => 535
)

或者用換行符\n替換並使用parse_ini_string()

如果匹配項不包含( , ),您可以通過一次調用preg_match_all來提取所需的匹配項:

$s = '"some t3xt../s8fo=123,sij(variable1=123,variable2=743,variable3=535)"';
if (preg_match_all('~(?:\G(?!\A),|\()\K[^,]+(?=[^()]*\))~', $s, $matches)) {
    print_r($matches[0]);
}

請參閱正則表達式演示PHP 演示

詳情

  • (?:\G(?,\A),|\() - 前面成功匹配的結尾和逗號,或( char
  • \K - 匹配重置運算符,丟棄到目前為止與當前整體匹配 memory 緩沖區匹配的所有文本
  • [^,]+ - 一個或多個除逗號以外的字符(如果您也期望空匹配,請使用[^,]*
  • (?=[^()]*\)) - 一個正向前瞻,需要零個或多個字符,而不是() ,然后是當前位置右側的)

暫無
暫無

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

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