想象一下,我有一个具有以下值的文本区域。
@3115
Hello this is a test post.
@115
Test quote
我正在尝试使用正则表达式在 PHP 中找到一种方法,即使有多个符号,该方法也会获得"@"符号后面的数值。
我想将从正则表达式返回的值存储到数组中是我正在寻找的。
试试这个:
$str = <<<EOF
@3115
Hello this is a test post.
@115
Test quote
EOF;
preg_match_all('/@(d+)/', $str, $matches);
var_dump($matches[1]); // Returns an array like ['3115', '115']
preg_match_all
函数获取输入字符串中正则表达式的所有匹配项,并返回捕获组。
正则表达式细分
/@(d+)/
-
@
字面上与字符匹配。 -
(
启动捕获组。 -
d
匹配数字(等于 [0-9](。 -
+
表示数字可以重复一次或多次。 -
)
结束捕获组。
(以preg_match_all
函数为例,但函数无关紧要,其中的正则表达式很重要:(
$inputString = "@3115
Hello this is a test post.
@115
Test quote";
preg_match_all("/@(d+)/",$inputString,$output);
//$output[1] = "3115";
//$output[2] = "115";
这将找到一个@
字符,然后找到d
哪个是任何数值,然后+
表示一次或多次捕获[数值]。 ()
将其设置为捕获组,因此将仅返回找到的数字,而不返回它前面的@
。
匹配@
,用K
忘记它,然后匹配一个或多个数字作为全字符串匹配。
代码:(演示(
$str = <<<TEXT
@3115
Hello this is a test post.
@115
Test quote
TEXT;
preg_match_all('/@Kd+/', $str, $matches);
var_export($matches[0]);
输出:
array (
0 => '3115',
1 => '115',
)