用正则表达式匹配以感叹号开头的整行文本

29

我试图使用正则表达式匹配以!开头的整行文本。

我写了类似于这样的表达式:/(!\w+\s+\S+)/ig,它可以匹配两个单词,但仅限于两个单词。我想匹配直到换行符的单词。此外,我发现在句子中间有隐藏部分会有问题。

实时示例:http://www.rubular.com/r/MXmholsDwE

6个回答

50

你只需要

^!.*

请查看更新的正则表达式演示

^(在Ruby中)匹配行的开头,!将匹配一个字面上的!.*将匹配除换行符以外的零个或多个字符(如果您使用rubular网站,则我假设您正在使用Ruby)。

如果您使用的是Ruby之外的其他正则表达式版本,例如JS、PHP或.NET,则需要指定/m-MULTILINE-修改器(例如JavaScript中的/^!.*/gm)。


1
工作得很好 :), 但有一件事 - 需要添加 <br> 异常,因此:^!.[^<]* - Szmerd

4

如果您想匹配行尾的所有内容:

/(!.+)/

如果您想确保它遵循格式 !word---

/!\w.+/

2
另一个解决方案是。
^!\b.*$

在哪里

^ 行首

! 匹配起始

\b.*$ 匹配行末的其余部分


1
你可以使用带有全局标志global.+正则表达式来匹配单独的整行。以下是一个示例:

enter image description here


1
如果您想为<br>添加一个例外,您应该使用正向前瞻运算符。请注意,使用正则表达式解析HTML文档通常不是一件好事。
我认为您也应该考虑<br />。因此,最终的正则表达式应该是:
^!.+?(?=\<br\>|\<br\s*\/\>|$)

它将匹配下面示例中突出显示的部分:

!剧透示例
没有剧透
!剧透
!带更多剧透的 <br> 单词
!剧透直到新 <br /> 行

句子中的剧透! 中间

示例:https://regex101.com/r/nZ0oY9/3


0

你也可以使用

^![^\n]*

说明:

^ - 字符串的开头

! - 匹配字面上的 !

[^\n]* - 匹配零个或多个非换行符的字符

演示

Rubular 演示


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