我试图从大型数据库中的产品描述中提取一部分文本(书籍参考)
的例子:
books A 41.14 (products -> cat1 -> (1990-2000))
只需要A 41.14
我在PHP中尝试过这个(总是后面跟着括号)
books(.*)(?='s'(.*'))
但没有按预期捕获,我需要排除断言,这是可能的吗?
在正则表达式中使用'K
来排除以前的匹配,并且还使用查找头来检查以下应该是's*(
(即,零或多个空格后跟(
符号)
books's*'K.*?(?='s*'()
演示PHP代码应该是,
<?php
$mystring = "books A 41.14 (products -> cat1 -> (1990-2000))";
$regex = '~books's*'K.*?(?='s*'()~';
if (preg_match($regex, $mystring, $m)) {
$yourmatch = $m[0];
echo $yourmatch;
}
?> //=> A 41.14
如果您感兴趣的产品代码永远不能包含开括号字符,那么您可以简单地使用以下模式:
books's+([^(]+)'s+'(
如果开括号字符可以出现在产品代码中,那么您的任务就比较棘手了。
请试试这个:
preg_match( '/books's?(['w]+'s?['d|'.]+).*/i', "books A 41.14 (products -> cat1 -> (1990-2000))", $matches);
echo $matches[1];
希望有帮助,
如果float前面总是有一个字母,可以使用。
('w ('d+)'.('d+))