preg_match_all使用

时间:2011-08-30 03:22:45

标签: php regex

我有一个始终遵循以下格式的字符串:

This Fee Name :  *  Fee Id  * Fee Amount  $* is required for this activity

示例:

This Fee Name :  STATE TITLE FEE  Fee Id  2 Fee Amount  $5.50 is required for this activity

我想用PHP做的是传递字符串并获得结果

  • STATE TITLE FEE
  • 2
  • 5.50

我很确定preg_match_all是我想要的,但无法弄清楚如何正确使用正则表达式。

3 个答案:

答案 0 :(得分:5)

实际上,您可以使用preg_match并使用括号捕获所需的部分(请注意,括号内的?:表示括号仅用于分组(即可能有小数)美元金额之后的点和一个或多个数字))。 (警告:未经测试,但这应该有效。)

$str="This Fee Name :  STATE TITLE FEE  Fee Id  2 Fee Amount  $5.50 is required for this activity";

if(preg_match('/^This Fee Name :\s+(.*)\s+Fee Id\s+(\d)\s+Fee Amount\s+(\$\d+(?:\.\d+)?)\s+is required for this activity$/',$str,$matches))
{
  $fee_name=$matches[1];
  $fee_id=$matches[2];
  $fee_amount=$matches[3];
}
else
{
  //No matches!  Do something...or not.  Whatever.
}

答案 1 :(得分:2)

尝试以下方法:

$a = 'This Fee Name :  STATE TITLE FEE  Fee Id  2 Fee Amount  $5.50 is required for this activity';
$regex = '/This Fee Name :  (.+)  Fee Id  (.+) Fee Amount  \$(.+) is required for this activity/';
$matches = array();
preg_match($regex, $a, $matches);
var_dump($matches);

输出:

array(4) {
  [0]=>
  string(91) "This Fee Name :  STATE TITLE FEE  Fee Id  2 Fee Amount  $5.50 is required for this activity"
  [1]=>
  string(15) "STATE TITLE FEE"
  [2]=>
  string(1) "2"
  [3]=>
  string(4) "5.50"
}

答案 2 :(得分:0)

在PHP.net文档中,您将看到通过使用指定参数调用函数来使用preg_match_all

  

int preg_match_all(string $ pattern,string $ subject [,array& $ matches [,int $ flags = PREG_PATTERN_ORDER [,int $ offset = 0]]])

第一个参数,即模式,是如何从下一个参数(主题)中捕获信息。

主题是您希望匹配的文本。这将是您指定的信息串......“此费用名称:......等”

第三个参数是一个新数组,您可以在其中存储结果。

但是,您希望使用正则表达式解析字符串的方式存在根本缺陷。您没有将“值”与“密钥”分开的常用分隔符。

如果我是你,在这种情况下,我会使用explode()

试试这个:

$string = "This Fee Name :  *  Fee Id  * Fee Amount  $* is required for this activity";
$name = explode("This Fee Name :", $string, 2);
$name = $name[1];

$id = explode("Fee Id", $string, 2);
$id = $id[1];

$amount = explode("\$", $string, 2);
$amount = explode(" ", $amount[1], 2);
$amount = $amount[0];

echo "$name";
echo "$id";
echo "$amount";

我没有测试任何这个,并且在几个月内没有使用PHP但是嘿,试一试!