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

时间:2012-05-31 23:32:58

标签: php regex split extract

我无法为我的生活似乎能够弄清楚我是如何在角色之间提取角色的。

考虑这个字符串,

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

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

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

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

2 个答案:

答案 0 :(得分: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,但这要花钱。这online regex tester看起来很有希望。

答案 1 :(得分: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>";

See it working

如果您真的想要掌握正则表达式的细节,我建议的最佳资源是http://www.regular-expressions.info/