我想搜索shell腳本中定義的變量。PHP preg_match返回字符串的字符數而不是預期的結果
<?php
$code = '
#!/bin/bash
foo = "Hello world!"
bar="123"
echo -e "The value of foo is $foo\n"
echo -e "The value of bar is $bar"
';
$var_pattern = "/(^[a-zA-Z0-9_]+[\= ]+([\"\']?)+(.)+([\"\']?))*$/";
preg_match($var_pattern, $code, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
有在上面的例子被定義兩個變量(FOO &巴)。我使用regex101.com檢查過的正則表達式。
我得到的結果是...
Array
(
[0] => Array
(
[0] =>
[1] => 121
)
)
121似乎是在代碼中的字符數。我期待的結果是更像...
Array
(
[0] => Array
(
[0] =>
[1] => foo = "Hello world!"
),
[1] => Array
(
[0] =>
[1] => bar="123"
)
)
或類似的!我究竟做錯了什麼?
那就是'PREG_OFFSET_CAPTURE'一樣。它包括比賽位置。你不是在找'preg_match_all'嗎? – mario
@mario我嘗試了preg_match_all並從中得到了類似的結果(即字符數) – Ally
首先,您需要將m標誌添加到您的模式,否則^和$匹配字符串的開始和結尾而不是其中的換行符。 –