[英]Look inside pattern if parent pattern matches and share chars between patterns
[英]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]);
}
詳情:
(?:\G(?,\A),|\()
- 前面成功匹配的結尾和逗號,或(
char\K
- 匹配重置運算符,丟棄到目前為止與當前整體匹配 memory 緩沖區匹配的所有文本[^,]+
- 一個或多個除逗號以外的字符(如果您也期望空匹配,請使用[^,]*
)(?=[^()]*\))
- 一個正向前瞻,需要零個或多個字符,而不是(
和)
,然后是當前位置右側的)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.