正则表达式中的Php前瞻断言

5

我想用断言来编写一个正则表达式,以从字符串unknownstring/55.1中提取数字55,这是我的正则表达式:

    $str = 'unknownstring/55.1';
    preg_match('/(?<=\/)\d+(?=\.1)$/', $str, $match);

所以,基本上我想说的是给我斜杠后面的数字,接着是一个点和数字1,并且在那之后没有其他字符。但它不匹配正则表达式。我试图从末尾删除$符号,它就匹配了。但这个条件很重要,因为unknownstring部分可能包含类似的文本,例如unknow/545.1nstring/55.1。也许我可以使用preg_match_all,并取最后一次匹配,但我想知道为什么第一个正则表达式不起作用,我的错误在哪里。

谢谢


没有正则表达式,你可以在 / 上分割并取出点之前的所有内容。 - Marco Mura
1
@MarcoMura 是的,有其他选择,正如另一个也提到了,我只是想知道我的错误。谢谢。 - dav
1个回答

3

在先行断言中使用锚点 $

(?<=\/)\d+(?=\.1$)

正则表达式演示

你不能在正向预查外使用$,因为你的数字不在输入的末尾,并且后面有一个\.1跟随。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接