Php 预匹配所有使用

Php 预匹配所有使用,php,regex,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传递字符串并获得结果 州产权费 2 5.50 我很确定我想要的是preg\u match\u all

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

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传递字符串并获得结果

  • 州产权费
  • 2
  • 5.50

我很确定我想要的是
preg\u match\u all
,但我不知道如何正确使用正则表达式。

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

请尝试以下操作:

$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"
}

在PHP.net文档中,您将看到
preg\u match\u all
通过使用指定参数调用函数来使用:

int-preg_-match_-all(字符串$pattern,字符串$subject[,数组和$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了,但是,嘿,试试看!

这是一个很可能会打破代码其他部分处理费用金额的费用金额吗?哦,现在我知道你要问这个问题了。没有想到让正则表达式同时验证表达式。观察得好。这是最好的t使用信息的分隔符,如州所有权费\t2\t5.50,然后从数据中派生字符串。你永远不应该从字符串中派生数据,这只是一种倒退的做法。我同意Styler,但我正在输入这些数据,我无法控制接收到的内容。感谢Jong Bor的帮助。听听ex的声音经验:在将代码发布到这里之前,一定要测试它。:/而且有了像Ideone这样的工具,没有理由不进行测试——请检查:。(顺便说一下,您的代码缺少一个括号。)
$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";