我有一个字符串,在和之间包含普通字符,白色字符集和换行符。此正则表达式不起作用:/<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风格数据。“出版年”行如下所示(在行的开头): 对于我正在编写的脚本,我定义了以下正则表达式函数: 但是,由于该模式可能出现在数据的其他位置,因此会产生假阳性结果。 因此,我只想匹配行首的模式。通常,我会为此目的而使用,但是无法匹配我的结果。另一方面,使用似乎可以满足我的要求,但这可能给我带来