当前位置: 首页 > 面试题库 >

如何使用正则表达式使点匹配换行符

柳刚豪
2023-03-14
问题内容

我有一个字符串,在和之间包含普通字符,白色字符集和换行符。此正则表达式不起作用:/<div>(.*)<\/div>。这是因为.*与换行符不匹配。我的问题是,该怎么做?


问题答案:

您需要使用DOTALL修饰符。

'/<div>(.*)<\/div>/s'

这可能无法完全满足您的需求,因为您的贪婪匹配。您可以改为尝试非贪婪匹配:

'/<div>(.*?)<\/div>/s'

如果没有其他标签,您也可以通过匹配除“ <”以外的所有内容来解决此问题:

'/<div>([^<]*)<\/div>/'

另一个观察结果是,您不需要将其/用作正则表达式定界符。使用另一个字符意味着您不必逃避/in
</div>,从而提高了可读性。这适用于所有上述正则表达式。如果您使用’#’而不是’/’,将显示以下内容:

'#<div>([^<]*)</div>#'

但是,由于嵌套的div,多余的空格,HTML注释和其他各种原因,所有这些解决方案都可能失败。HTML太复杂,无法使用Regex解析,因此您应该考虑使用HTML解析器。



 类似资料:
  • 问题内容: 原始数据是: 我想匹配一条线,但是不能使用 但是,我可以使用match 。 我该如何搭配 问题答案: 默认情况下,和分别匹配输入的开始和结束。您需要使用启用多行模式,这会导致并匹配行的开始和结束: 演示: 产生以下输出: 编辑我 没有任何匹配的事实是因为默认情况下,和不匹配。如果您通过启用了DOT-ALL ,也使匹配了它们,那么您将看到整个输入字符串都被匹配了: 编辑二 在这种情况下,

  • 问题内容: 该字符串可以类似于以下之一: 我想匹配不限数量的“ a(x,y)”。如何使用Regex做到这一点?这是我所拥有的: 它仅匹配“ a(x,y)”的两个递归。 问题答案: Java的标准正则表达式库不支持递归,因此您无法将此类通用嵌套结构与之匹配。 但是在确实支持递归的版本(Perl,PCRE,.NET等)中,您可以使用以下表达式:

  • 字符串可以类似于以下内容之一: 我想匹配无限数量的“a(x,y)”。我如何使用正则表达式来实现这一点?以下是我所拥有的: 它只匹配"a(x, y)"的两个递归。

  • 我们得到了一些这样的内容:

  • 问题内容: 我正在尝试使用Java匹配多行文本。当我将类与修饰符一起使用时,我可以匹配,但不能. 使用和使用相同的模式似乎无效。 我确定我缺少什么,但不知道是什么。正则表达式不是很好。 这就是我尝试过的 问题答案: 首先,你在错误的假设下使用修饰符。 或告诉Java接受锚点并在每行的开头和结尾进行匹配(否则,它们仅在整个字符串的开头/结尾进行匹配)。 或告诉Java也允许点与换行符匹配。 其次,在

  • 问题内容: 我正在尝试从Thomson-Reuters Web of Science中提取出版年份的ISI风格数据。“出版年”行如下所示(在行的开头): 对于我正在编写的脚本,我定义了以下正则表达式函数: 但是,由于该模式可能出现在数据的其他位置,因此会产生假阳性结果。 因此,我只想匹配行首的模式。通常,我会为此目的而使用,但是无法匹配我的结果。另一方面,使用似乎可以满足我的要求,但这可能给我带来