1

我一生都无法弄清楚我如何在字符之间提取字符。

考虑这个字符串,

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

我想做的是提取“a”和“b”(10和25)的值

所以基本上我想要做的是找到“#a =”并在下面的/之前获取所有内容,然后对b做同样的事情。谁能告诉我这是如何实现的?

此外,如果有人知道他们可以推荐的任何可靠的正则表达式教程,我将非常感激,我已经检查了 nettuts、w3schools 和 php.net,它们都有很好的,但任何其他建议都会很棒。谢谢你。

4

2 回答 2

4

这对我有用:

<?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,但这需要花钱。这个在线正则表达式测试器看起来也很有前途。

于 2012-05-31T23:44:18.983 回答
3
$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>";

看到它工作

如果您真的想掌握正则表达式的具体细节,我可以推荐的最佳资源是http://www.regular-expressions.info/

于 2012-05-31T23:47:42.550 回答