在某些字符之间解析字符串的最佳函数是什么?
例如:
CHI 3 - MIN 0
1st
CHI - Kane (Seabrook, Toews)
2nd
CHI - Kane (Seabrook, Toews)
3rd
CHI - Kane (Seabrook, Toews)
所以这是一个曲棍球比赛的比分,第一个名字是射手,第二个是助攻。
我只需要在“ - ”和“(”对于$ goalcorer
之间抓住在“(”和“,”之间为$ assist1
在$ help2
之间添加“,”和“)”结果应为:
$goalscorer = Kane
$assist1 = Seabrook
$assist2 = Toews
最终我想制作一个大脚本,我可以粘贴一堆盒子,并循环运行并向玩家目标/辅助列添加“+1”。但就目前而言,我想知道如何解析分数。
非常感谢任何帮助!
答案 0 :(得分:3)
这将与您拥有的相匹配
https://regex101.com/r/yT7aW7/1
$str = "CHI - Kane (Seabrook, Toews)";
preg_match('/^(\w+)\s-\s(?P<goalscorer>\w+)\s\((?P<assist1>\w+),\s(?P<assist2>\w+)\)$/', $str, $matches);
英文
^
行首\w
任何工作角色都包含a-zA-Z _ (
\ w + )
捕获,+
多一个\s
单个空格-
连字符?P<name>
指定的捕获组\(
或\)
字面上的paren,正如捕获的那样。$
行尾大多数只是重复那些,这是一个非常基本的正则表达式。
答案 1 :(得分:1)
在我看来,你在问两件事:1。如何处理你的盒子比分的结果并过滤相关的线条; 2.从相关行中提取特定值。
假设您的boxscore可用作名为$str
的变量,您可以在其换行符上展开它,迭代结果,过滤所需的行,然后从这些行中提取值。
这样的东西非常机械,但是应该可行,给出上面的示例输入:
<?php
$str = <<<STR
CHI 3 - MIN 0
1st
CHI - Kane (Seabrook, Toews)
2nd
CHI - Kane (Seabrook, Toews)
3rd
CHI - Kane (Seabrook, Toews)
STR;
// split boxscore input on newlines
// to create an array of lines
$lines = explode(PHP_EOL, $str);
// iterate over lines
// filter each line... ignore zero-length lines
// check if the last char is ')'
// preg_split on filtered lines
// assign to vars
// etc.
foreach ($lines as $line) {
$len = strlen($line);
if ($len && $line[$len - 1] === ')') {
$matches = preg_split('/^\w{3}\s+-\s+|\s+\(|,\s+|\)/', $line, null, PREG_SPLIT_NO_EMPTY);
list($goalscorer, $assist1, $assist2) = $matches;
// do whatever you want with `$goalscorer`, `$assist1`, `$assist2`
}
}
当然,每次迭代都会覆盖$goalscorer
,$assist1
和$assist2
的值,但我只是说明此时您可以使用这些值执行任何操作,可以做进一步的操作或将它们写入数组或其他东西 - 这似乎超出了现在问题的范围。
正则表达式可能有点不雅;它适用于奇怪的双管和带连字符的姓氏。
希望这有帮助! :)