PHP正则表达式,提取指定字符之间的字符

rsl1atfo  于 2023-04-10  发布在  PHP
关注(0)|答案(2)|浏览(125)

我这辈子似乎都不能弄清楚我是如何在人物之间提取人物的。
考虑这个字符串,

$string = "sometext/#a=10/#b=25/moretext";

我想做的是提取“a”和“B”的值(10和25)
所以本质上我想做的是找到“#a=”并抓取后面/之前的所有内容,然后对b做同样的事情。有人能告诉我如何才能完成吗?
另外,如果有人知道任何可靠的regex教程,他们可以推荐我会非常感激,我已经检查了nettuts,w3schools和php.net,都有很好的,但任何其他的建议将是伟大的。

f45qwnt8

f45qwnt81#

这对我很有效:

<?php

$string = "sometext/#a=10/#b=25/moretext/#varname=Hello World/evenmoretext/";

$matchcount = preg_match_all('@#([^=]+)=([^/]*)/@', $string, $matches);

for ($i = 0; $i < $matchcount; ++$i) {
    echo "{$matches[1][$i]} = {$matches[2][$i]}\n";
}

输出:
a = 10
B = 25
varname = Hello World
很久以前,我发现网站http://www.regular-expressions.info/是有用的,它有很好的信息。你可能会发现,测试正则表达式的GUI程序可以帮助,因为它们可以在你输入表达式时真实的显示匹配。想到的一个例子是Regex Buddy,但这需要花钱。这个online regex tester看起来也很有前途。

ghg1uchk

ghg1uchk2#

$string = "sometext/#a=10/#b=25/moretext";
$expr = '@#([a-z]+)=(.+?)/@';
$count = preg_match_all($expr, $string, $matches);

$result = array();
for ($i = 0; $i < $count; $i++) {
    $result[$matches[1][$i]] = $matches[2][$i];
}

echo "<pre>";
print_r($result);
echo "</pre>";

See it working
如果您真的想掌握正则表达式的基本知识,我推荐的最佳资源是http://www.regular-expressions.info/

相关问题