php - php正则表达式获取字符串模式
问题描述
我想从原始文本中获取所有获利价值。但是书写模式不一样。
除了 20/30/50 之外,我得到了我想要的所有值。对于那个值,我只得到 20。
我想要整个单词为 20/30/50
$s = 'SS 1.0140 SL 1.0670 TP1 1.0870 TP 1 1.0870 TP 2 1.0870 Takeprofit1 1.0870 Take profit 1 1.0870 TP 1.0870 TP 20/30/50 TP-----1.0870 TP=1.0870 TP1=1.0870 TP Open';
$p = '#\b(TAKE ?PROFIT ?(?:[1-3]|\|TP|at)|TP ?(?:[1-3](?!\.\d))?)\b(.*?)\b(Open|(\d+(?:\.\d+)?))\b#i';
preg_match_all($p , $s , $m);
结果$m[3]
:
Array
(
[3] => Array
(
[0] => 1.0870
[1] => 1.0870
[2] => 1.0870
[3] => 1.0870
[4] => 1.0870
[5] => 1.0870
[6] => 20
[7] => 1.0870
[8] => 1.0870
[9] => 1.0870
[10] => Open
)
)
解决方案
添加(?:/\d+)*
到您的第三个捕获组。
https://regex101.com/r/hsQ0xD/1/
这使得重复的非捕获组(子字符串)“斜线然后一个或多个数字”是可选的。
代码:(演示)
$s = 'SS 1.0140 SL 1.0670 TP1 1.0870 TP 1 1.0870 TP 2 1.0870 Takeprofit1 1.0870 Take profit 1 1.0870 TP 1.0870 TP 20/30/50 TP-----1.0870 TP=1.0870 TP1=1.0870 TP Open';
$p = '#\b(TAKE ?PROFIT ?(?:[1-3]|\|TP|at)|TP ?(?:[1-3](?!\.\d))?)\b(.*?)\b(Open|(\d+(?:\.\d+)?(?:/\d+)*))\b#i';
preg_match_all($p , $s , $m);
var_export($m[3]);
输出:
array (
0 => '1.0870',
1 => '1.0870',
2 => '1.0870',
3 => '1.0870',
4 => '1.0870',
5 => '1.0870',
6 => '20/30/50',
7 => '1.0870',
8 => '1.0870',
9 => '1.0870',
10 => 'Open',
)
推荐阅读
- machine-learning - 检查输入时如何解决错误:大小不正确
- php - proc_open 找不到 jshint --version 命令
- c# - 从引用的项目加载 favicon.ico 不起作用 (_host.cshtml)
- c - Makefile:依赖于目标目录的规则
- html - 如何选择样式并将其应用于自定义标签
- bash - Bash:复制根/当前文件夹中具有相同扩展名的所有文件,但文件名包含特定字符串的文件除外
- javascript - Angular Typescript 动态地为类属性赋值
- flutter - 如何返回包含图像的列
- bash - 在服务器上创建 EBS 快照的问题(Linux EC2 实例)
- mongodb - docker-entrypoint-initdb.d 不执行脚本