如何在正则表达式组中包含多个新行和多个空格?

时间:2018-05-24 09:37:37

标签: java regex

我有以下问题。

我需要将所有这些变体与一个正则表达式匹配

<pre><code>some code</code></pre>

<pre><code>some code
code</code></pre>

<pre><code>
code
</code></pre>

此外,<pre><code>标记可能是多个空格。

我试过这个

<pre><code>(.*?)<\/code><\/pre>

但它并不像一个终极解决方案。

4 个答案:

答案 0 :(得分:2)

在JavaScript中,您可以使用[^],与.相反,它也与新行匹配。

在Java中,使.匹配任何字符(包括换行符)的最简单方法是使用Pattern.DOTALL标志(请参阅the manual),但如果不能使用标志正如你所说,你必须在正则表达式中写下Pattern.compile()

以下是添加了s(单行)标记(==Pattern.DOTALL)的正则表达式,因为我们在那里,i(不区分大小写)(==Pattern.CASE_INSENSITIVE )也是标志,因为你很可能也需要它:

(?si:<pre><code>(.*?)<\/code><\/pre>)

请注意,此处的外部组是非捕获组(它不会对组计数产生影响)。

至于空格,他们不需要像换行符这样的正则表达式中的任何特殊处理。在Java中,从捕获的String中删除前导空格和尾随空格(包括换行符)的最简单方法是.trim()它。

答案 1 :(得分:0)

s正则表达式与g一起使用(单行) 选项(也可能是<pre><code>选项),.

详细说明:

  • pre - 打开code\s*代码。
  • (.+?) - 前导空格(实际上是白色字符),如果有的话。
  • ? - 要捕获的代码块(注意\s* - 不情愿的版本)。
  • <\/code><\/pre> - 尾随空格(如果有)。
  • pre - 关闭codes代码。

由于\n选项,捕获组还会匹配任何代码块中的tmpFile个字符。

答案 2 :(得分:0)

如果您的代码没有使用<>,请使用:

<pre><code>([^<>]+)<\/code><\/pre>

这意味着没有使用字符<>的内容,使用此正则表达式,您可以解析<pre><code></code></pre>之间的所有内容

答案 3 :(得分:0)

否定前瞻断言用法

//assuming GET to your S3 assets is public.
curl full-path-of-sh.file > file_1.sh
sh file_1.sh