Php 正则表达式上的换行符

Php 正则表达式上的换行符,php,javascript,regex,Php,Javascript,Regex,我试图替换2个标记之间的所有内容,但无法构建正确的表达式 这就是我所做的:/(.*\n*)/ 我希望它捕捉任何字符,包括换行符 这是我需要捕获的一个示例: <tag> <div class="feed_title">Some Title</div> <div class="feed_content">Some text</div> </tag> 一些头衔 一些文本 你们能告诉我我做

我试图替换2个标记之间的所有内容,但无法构建正确的表达式

这就是我所做的:
/(.*\n*)/

我希望它捕捉任何字符,包括换行符

这是我需要捕获的一个示例:

 <tag>
       <div class="feed_title">Some Title</div>
       <div class="feed_content">Some text</div>
    </tag>

一些头衔
一些文本
你们能告诉我我做错了什么吗


这里有一个指向RegExr的链接和内容的完整示例:

也许你是有意这么做的

# The ... in this example is your text to match
preg_match("#<tag>(.*?)</tag>#s","...",$matches); 
#。。。在本例中,是要匹配的文本
preg#u match(“#(.*?)#s”、“…”、$matches);
下面是一篇关于使用PHP的文章的链接,其中有一些很好的例子

'#.#m'
m表示多行,它使点能够匹配换行符=换行符\n

编辑:

由于它已被敏锐的眼睛和良好的大脑纠正,因此它显然是'.+#s'

编辑2:

正如Michael Goldshteyn所说,这应该是可行的

$ch = '<tag>\s+<div class="feed_title">Some Title</div>\s+<div class="feed_content">Some text</div>\s+</tag>'

preg_match('#<tag>(.+?)</tag>#s',$ch,$match)
$ch='\s+一些标题\s+一些文本\s+'
preg#u match('#(.+?)#s',$ch,$match)
还有另一种解决方案,没有s标志,我认为:

preg_match('#<tag>((.|\s)+?)</tag>#',$ch,$match)
preg#u match('#((.|\s)+?)#',$ch,$match)
但它更复杂

编辑3:

我认为$ch中出现\s是胡说八道\s用于RE,而不是字符串

我写这篇文章是因为我认为它可能是空白\t,可能在之前和其他行的开头


\t是用转义符写的;这不是用字符串编写\s的理由,为什么不给我们一个例子,说明你的标记/输出是什么样的,以及你的精确preg\u match调用是什么样的。我对PHP没有问题,我的问题是返回标记内的内容。问题是,表达式可能是错误的,因为我无法获取内容,我正在RegExr上测试表达式,当出现换行时它会失败,这是必要的,因为脚本正在处理HTML代码。非常感谢Eyequem和Michael!eyequem根据michael的回答进行的最后一次编辑成功了。再次感谢,你做到了!我正在测试您在RegExr上给我的表达式,但它没有标记示例中的代码,这是因为行制动器字符抱歉,我根据您的更新修改了我的答案,但没有将周围的reg-ex斜杠更改为其他字符(例如磅符号)。请尝试使用我编辑的答案。请注意,在RegExr中,您不使用分隔符(
,在本例中)或尾部修饰符(
s
)。正则表达式应该是
(.*)
,您必须选中
dotall
复选框。不,是
s
(单行或点匹配全部)修饰符允许
元字符匹配换行符。多行模式增强了起始和结束锚定(
^
$
),因此它们也在线条边界处匹配。您能给我一个应用于我的端点的示例吗。我会非常感激的,因为我对常规表达还不熟悉啊!!我真遗憾。然而,我早就知道这一点。对不起,我累了。
(.|\s)+?
并不能替代前面解释的
(.+?)
。如果您不能使用
dotall
标志(例如,如果您使用的是不支持它的JavaScript),那么最好使用
([\s\s]+?)
。如果您只是不希望整个正则表达式处于
dotall
模式,您可以将其效果局限于该组,如下所示:
(?s:.+?)
@Alan Moore谢谢。我不知道这个问题。正则表达式非常容易陷入陷阱。我没有清楚地理解链接页面中的所有解释,我会更彻底地研究它。非常感谢。