正则表达式 - 多线问题

3 regex

我想我已经烧坏了,这就是为什么我看不出明显的错误.无论如何,我想要以下正则表达式:

#BIZ [\ S]*#ENDBIZ

抓住#BIZ标签,#ENDBIZ标签以及标签之间的所有文字.例如,如果给出一些文本,我希望表达式匹配:

#BIZ
some text some test
more text
maybe some code
#ENDBIZ
Run Code Online (Sandbox Code Playgroud)

目前,正则表达式没有任何匹配.我做错了什么?

额外细节

我正在PHP中执行以下操作

preg_replace('/#BIZ [.\ s]*#ENDBIZ /','我的新文本',$ strMultiplelines);

Ben*_*ank 13

点在字符类中失去了它的特殊含义 - 换句话说,[.\s]意思是"匹配句点或空格".我相信你想要的是[\s\S]"匹配空白或非空白".

preg_replace('/#BIZ[\s\S]*#ENDBIZ/', 'my new text', $strMultiplelines);
Run Code Online (Sandbox Code Playgroud)

编辑:关于点和字符类的一点:

默认情况下,点与换行符不匹配.大多数(所有?)正则表达式实现都有一种方法来指定它匹配换行符,但它因实现而不同.匹配(真),以兼容的方式任意字符的唯一方式是配对的速记类及其否定- [\s\S],[\w\W][\d\D].根据我的个人经验,第一个似乎是最常见的,可能是因为当你需要匹配换行符时使用\s它,并且包括明确表示你正在这样做.

此外,点不是唯一在字符类中失去意义的特殊字符.事实上,这是特殊的字符类中的唯一字符是^,-,\,和].查看Regular-Expressions.info上字符类页面的"元字符内部字符类"部分.