Php regexp-在模式之前匹配模式和前缀
我需要匹配一个特定的模式Php regexp-在模式之前匹配模式和前缀,php,regex,Php,Regex,我需要匹配一个特定的模式 (?<!\d|\d )(?:dk)?(\d{2})\D?(\d{2})\D?(\d{2})\D?(\d{2})(?!\d) 但是我还需要在模式之前获取“prefix”字符串 这是我的解决方案,但并不总是有效 ^(.*)(?<!\d|\d )(?:dk)?(\d{2})\D?(\d{2})\D?(\d{2})\D?(\d{2})(?!\d) ^(.*)(? 很难解释,所以在这里检查一下 它太“贪婪”,并且匹配字符串中的多个模式。实际匹配是第二个匹配的“前
(?<!\d|\d )(?:dk)?(\d{2})\D?(\d{2})\D?(\d{2})\D?(\d{2})(?!\d)
但是我还需要在模式之前获取“prefix”字符串
这是我的解决方案,但并不总是有效
^(.*)(?<!\d|\d )(?:dk)?(\d{2})\D?(\d{2})\D?(\d{2})\D?(\d{2})(?!\d)
^(.*)(?
很难解释,所以在这里检查一下
它太“贪婪”,并且匹配字符串中的多个模式。实际匹配是第二个匹配的“前缀”的一部分
示例应输出两个匹配项。一个匹配项为dk30344510
和62226420
示例应将CVR-nr.
作为前缀输出,dk30344510
作为模式,第二个匹配应为/Tlf.
作为前缀,62226420
作为模式您的正则表达式没有输出预期结果,因为您有一个字符串锚点^
和一个贪婪点*
。这意味着t仅从字符串的开头开始,并仅以一个成功匹配结束
解决方案
正则表达式:
\s*(.*?)\s*\b((?i:dk)?(?:\d{2}\D?){3}\d{2})\b
我没有对您的主正则表达式应用太多更改。我所做的是减少重复模式\d{2}\d?
,并用单词边界\b
标记替换lookarounds
您可以使用“g”选项尝试此选项以获得多个结果
^(.*?)\s(dk\d+)\s(.*?)\s(\d+)
您将模式锚定在字符串开始处,是否只在字符串开始处查找匹配项?这是您想要的吗?@revo看起来像。您做了什么?:)您的语言/环境是什么?语言是php(*)
意味着它是不可冻结的,如果可能,它将匹配任何模式?它是不贪婪的,并且在正则表达式中接近下一个模式之前尽可能少地消耗字符。
^(.*?)\s(dk\d+)\s(.*?)\s(\d+)