从结果中排除正则表达式断言


Exclude regex assertion from result?

我试图从大型数据库中的产品描述中提取一部分文本(书籍参考)

的例子:

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+))