Regex is not working for some cases - PHP(正则表达式在某些情况下不起作用-PHP)
本文介绍了正则表达式在某些情况下不起作用-PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有许多字符串模式,我可以从中筛选出数据并将其插入数据库。现在,我必须处理我的旧正则表达式无法正确匹配的字符串。
这是我的正则表达式:
$re = "/(?:Expiration Fee: )?(d+)s+((?:[a-zA-Z0-9/]+s+)*)(?:(([a-zA-Z]+))s+)?(?:>([0-9.]+)s+)?(?:(d+-d+)s+)?(?:((d{1,2}(?::d{2})?[AP]M))s+)?(?:@s+([d.]+))/";
我的完整代码:
$re = "/(?:Expiration Fee: )?(d+)s+((?:[a-zA-Z0-9/]+s+)*)(?:(([a-zA-Z]+))s+)?(?:>([0-9.]+)s+)?(?:(d+-d+)s+)?(?:((d{1,2}(?::d{2})?[AP]M))s+)?(?:@s+([d.]+))/";
$strs = array("Expiration Fee: 10 LONG AUD/USD >.8189 (9:50AM) @ 90.5","10 Wall St 30 (Mar) >17900 (4:15PM) @ 69.5","2 AUD/USD >.8114 (11:35AM) @ 97.5","Expiration Fee: 1 SHORT AUD/USD >.8114 (11:35AM) @ 87","2 Wall St 30 (Mar) 18000-18100 (12PM) @ 18023","2 LONG US Tech 100 (Mar) >4284 (1:15PM) @ 56.5","1 EUR/USD >1.2180 (3PM) @ 41.5","Expiration Fee: 1 SHORT AUD/USD >.8114 (11:35AM) @ 87","Expiration Fee: 1 LONG GBP/USD >1.5090 (8:55PM) @ 95.5","Expiration Fee: 2 SHORT US 500 (Mar) >2037.7 (10AM) @ 5.5","Expiration Fee: 1 SHORT EUR/USD >1.1582 (2:20PM) @ 11.5","6 SHORT GBP/USD >1.5200 (3:10PM) @ 22.3333","Expiration Fee: 1 SHORT GBP/USD >1.5085 (8PM) @ 17.5","Expiration Fee: 1 SHORT EUR/GBP >.7340 (3PM) @ 33.25","2 Wall St 30 (Mar) 18000-18100 (12PM) @ 18023","Expiration Fee: 5 LONG US Tech 100 (Mar) 4190-4390 (4:15PM) @ 4291","2 LONG Wall St 30 (Mar) >18000 (1:15PM) @ 53.5","1 AUD/USD .7570-.7670 (2PM) @ 0.7626","1 US 500 (Jun) 2075.0-2085.0","1 US 500 (Jun) 2075.0-2085.0 (1PM) @ 2079","1 US 500 (Jun) 2075.0-2085.0 (1PM) @ 2079","
1 AUD/USD .7570-.7670 (2PM) @ 0.7626","2 AUD/USD .8020-.8220 (11PM) @ 0.8118");
foreach ($strs as $subject) {
echo "======<br />
$subject<br />
";
if (preg_match($re, $subject, $m))
for ($i=1; $i<count($m); $i++)
if ($m[$i]) echo "$m[$i]<br />
";
}
不适用于我的字符串模式:
1 AUD/USD .7570-.7670 (2PM) @ 0.7626
1 US 500 (Jun) 2075.0-2085.0
1 US 500 (Jun) 2075.0-2085.0 (1PM) @ 2079
1 AUD/USD .7570-.7670 (2PM) @ 0.7626
2 AUD/USD .8020-.8220 (11PM) @ 0.8118
在线演示截图:
推荐答案
以下是匹配所有案例的正则表达式:
(?:Expiration Fee: )?(d+)s+((?:[a-zA-Zd/]+s+)*)(?:(([a-zA-Z]+))s+)?(?:>([0-9.]+)s+)?(?:([d.]+-[d.]+)s*)?(?:((d{1,2}(?::d{2})?[AP]M))s+)?(?:@s+([d.]+))?
参见demo
与i
选项和统一数字匹配一起使用的缩写版本:
(?:Expiration Fee: )?(d+)s+((?:[a-zd/]+s+)*)(?:(([a-z]+))s+)?(?:>([d.]+)s+)?(?:([d.]+-[d.]+)s*)?(?:((d{1,2}(?::d{2})?[AP]M))s+)?(?:@s+([d.]+))?
Demo 2
这篇关于正则表达式在某些情况下不起作用-PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:正则表达式在某些情况下不起作用-PHP
猜你喜欢
- 如何在 Symfony2 中正确使用 webSockets 2021-01-01
- 如何从数据库中获取数据以在 laravel 中查看页面? 2022-01-01
- 覆盖 Magento 社区模块控制器的问题 2022-01-01
- PHP - if 语句中的倒序 2021-01-01
- openssl_digest vs hash vs hash_hmac?盐与盐的区别HMAC? 2022-01-01
- 使用 GD 和 libjpeg 支持编译 PHP 2022-01-01
- PHP foreach() 与数组中的数组? 2022-01-01
- 如何使用 Google API 在团队云端硬盘中创建文件夹? 2022-01-01
- Laravel 5:Model.php 中的 MassAssignmentException 2021-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01