我厌倦了对正则表达式感到害怕。本文的主题仅限于PHP实现的正则表达式,但任何通用的正则表达式建议显然都会受到欢迎(例如,请不要让我困惑于与PHP不适用的范围)。
以下内容(据我所知)将删除数字之间的任何空格。也许有更好的方法来做到这一点,但我仍然希望理解发生了什么。
$pat="/\b(\d+)\s+(?=\d+\b)/";
$sub="123 345";
$string=preg_replace($pat, "$1", $sub);
经过模式匹配,我的解释是:
\b
一个单词边界\d+
一个或多个数字的子模式\s+
一个或多个空格(?=\d+\b)
向前断言,要求后面有一个或多个数字紧接着单词边界?- 综上所述,查找任何单词边界后跟一个或多个数字然后是一些空格,然后进行某种向前断言,并将结果保存在$1中以替换该模式。
问题:
- 我的解释正确吗?
- 那个向前断言是什么意思?
- 前导
/
和尾随/
的目的是什么?
答案:
经过模式匹配,我理解如下:
\b
:一个单词边界。\d+
:匹配一个或多个数字的子模式。\s+
:匹配一个或多个空格。(?=\d+\b)
:正向预查,要求其后紧接着一个或多个数字并且后面跟单词边界。- 将以上内容联合起来,查找任何一个单词边界后跟着一个或多个数字并且后面跟着一些空格,然后进行正向预查,并将结果保存在$1中以替换这个模式。
问题:
- 我的解释正确吗?
- 那个正向预查的含义是什么?
- 前导
/
和尾随/
的作用是什么?
/
和尾随/
是正则表达式的分隔符,用于标识正则表达式的开始和结束。