Php 理解正则表达式
我厌倦了对正则表达式的恐惧。这篇文章的主题仅限于正则表达式的PHP实现,但是,任何通用正则表达式的建议都将受到赞赏(即,不要把我与不适用于PHP的范围混淆) 下面(我相信)将删除数字之间的空白。也许有更好的办法,但我还是想知道到底发生了什么Php 理解正则表达式,php,regex,Php,Regex,我厌倦了对正则表达式的恐惧。这篇文章的主题仅限于正则表达式的PHP实现,但是,任何通用正则表达式的建议都将受到赞赏(即,不要把我与不适用于PHP的范围混淆) 下面(我相信)将删除数字之间的空白。也许有更好的办法,但我还是想知道到底发生了什么 $pat="/\b(\d+)\s+(?=\d+\b)/"; $sub="123 345"; $string=preg_replace($pat, "$1", $sub); 通过这种模式,我的解释是: \b单词边界 \d+一个由1个或多个数字组成的子模式
$pat="/\b(\d+)\s+(?=\d+\b)/";
$sub="123 345";
$string=preg_replace($pat, "$1", $sub);
通过这种模式,我的解释是:
单词边界\b
一个由1个或多个数字组成的子模式\d+
一个或多个空格\s+
一个或多个数字后跟单词边界的先行断言(?=\d+\b)
- 把它们放在一起,搜索任何单词边界,后跟一个或多个数字和一些空格,然后对其执行某种前瞻性断言,并将结果保存在$1中,以便它可以替换模式
- 我的上述解释正确吗
- 那个前瞻性断言是关于什么的
- 前导的
和尾随的/
的目的是什么/
abcde
将得到匹配:abcd
匹配的原因是字符串abcde
实际上包含:
a
b
c
d,后面有一个e
(这是一个字符!)abcd(?=f)
匹配将失败,因为序列:
"a", followed by "b", followed by "c", followed by "d that has an f in front of it"
找不到
前导/尾随的目的是什么
这些是分隔符,在PHP中用于区分字符串的模式部分和字符串的修饰符部分。分隔符可以是任何字符,尽管我更喜欢自己签名。请记住,如果在模式中使用了用作分隔符的字符,则需要对其进行转义。最好观看此视频以及随后的4个视频: 本系列的其余部分可在此处找到: 一位同事把这个系列发给我,看完之后,我对使用正则表达式感到非常舒服
另一个好主意是安装RegexBuddy或Regexr。特别是RegexBuddy对于理解正则表达式的工作原理非常有用 有关参考和教程:*另请参阅和,以获取一些有用的工具,或参考手册。谢谢。现在就看一下deceze的建议。我会看看其他的。虽然基于ruby的regex(不确定是否有太大的区别),但我也发现自己是一个更容易使用的在线regex测试人员。我强烈建议你使用它,以便更容易掌握你的regex技能(调试正则表达式和测试对regexp语句的不同修改也容易得多。)但是“a”,后面跟着“b”,后面跟着“c”,后面跟着“d”,前面有一个e(不是e不是f)不匹配。请您详细说明。@user1032531当然,给我几分钟。Marten,很抱歉,我想我无意中推翻了您建议的编辑,但现在问题中出现了这些信息。啊哈,分隔符!所以我只有在有修饰符的情况下才需要它们,对吗?看,头是“零宽度”断言,意味着它们不包括在内在匹配中。因此,
abcd(?=e)
只有在后面跟一个e
时才说matchabcd
。关于分隔符,preg_replace(“[^a-zA-Z0-9]”,“'Hello[$&goodby')没有任何分隔符(除非方括号用作分隔符)。它无效吗?谢谢Maarteen00,我会检查它。