我有以下问题。
我需要将所有这些变体与一个正则表达式匹配
<pre><code>some code</code></pre>
<pre><code>some code
code</code></pre>
<pre><code>
code
</code></pre>
此外,<pre><code>
标记可能是多个空格。
我试过这个
<pre><code>(.*?)<\/code><\/pre>
但它并不像一个终极解决方案。
答案 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
- 关闭code
和s
代码。由于\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