我正在尝试从大型数据库中的产品说明中提取部分文本(书籍参考)
示例:
books A 41.14 (products -> cat1 -> (1990-2000))
我只需要A 41.14
我在PHP中试过这个(后面跟着括号)
books(.*)(?=\s\(.*\))
但它没有按预期捕获,我需要排除断言,是否可能?
答案 0 :(得分:1)
在你的正则表达式中使用\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
答案 1 :(得分:0)
如果您感兴趣的产品代码永远不能包含左括号字符,那么您可以简单地使用此模式:
books\s+([^(]+)\s+\(
如果开括号字符可以出现在产品代码中,那么您的任务就比较棘手。
答案 2 :(得分:0)
请试试这个:
preg_match( '/books\s?([\w]+\s?[\d|\.]+).*/i', "books A 41.14 (products -> cat1 -> (1990-2000))", $matches);
echo $matches[1];
希望它有所帮助,
最好的问候
答案 3 :(得分:0)
如果你在浮动之前总是有一个字母,你可以使用。
(\w (\d+)\.(\d+))