如何在正则表达式中选择多行?

时间:2017-07-28 21:23:33

标签: regex sublimetext3 sublimetext

我有一些遵循这种模式的HTML:

<p>1. ALLCAPSTEXT1 - etc etc</p>
<p>01. lowercasetext1 - etc etc</p>
<p>02. lowercasetext1 - etc etc</p>
<p>2. ALLCAPSTEXT2 - etc etc</p>
<p>01. lowercasetext2 - etc etc</p>
<p>02. lowercasetext2 - etc etc</p>
<p>03. lowercasetext2 - etc etc</p>
<p>3. ALLCAPSTEXT3 - etcetc</p>
<p>01. lowercasetext3 - etc etc</p>

&#34; ALLCAPSWORD&#34;之后的行数。 line`变化,因此它可以是1到10+之间的任何地方。我想用这种模式选择所有这些线条(它可以达到100多行)。

到目前为止,我有:

<p>(\d+)\.\s[A-Z][A-Z]+(.+)</p>\n+<p>(.+)</p>\n+<p>\d+\.\s[A-Z][A-Z]+(.+)</p>

第一个p标签中的东西捕获带有全文字幕的行,然后转到下一行,p标签中的东西用小写文本捕获该行,然后转到下一行全文大写。

所以我希望它能得到所有这些:

<p>1. ALLCAPSTEXT1 - etc etc</p>
<p>01. lowercasetext1 - etc etc</p>
<p>02. lowercasetext1 - etc etc</p>

但是它只捕获全文大写文本后的第一行,然后跳到带有全文字幕文本的下一行并执行相同的操作。

<p>1. ALLCAPSTEXT1 - etc etc</p>
<p>01. lowercasetext1 - etc etc</p>

然后转到:

<p>2. ALLCAPSTEXT2 - etc etc</p>
<p>01. lowercasetext2 - etc etc</p

有关如何捕获所有具有小写文本的行的提示,直到它到达包含全文字幕的下一行,冲洗并重复?

2 个答案:

答案 0 :(得分:0)

可以这样做

<p id="monthNumber"> 2 </p> console.log(getNumOfDays()); function getNumOfDays(){ var array = new Array(1,3,5,7,8,10,12, 01, 03, 05, 07, 08); var monthNumber = document.getElementById("monthNumber").innerHTML; var x; for(var i = 0; i <= array.length; i++) { if(monthNumber == array[i]) { x = 31; break; } else { x = 30; } //it always returns 1 to array[i] } return x; }

https://regex101.com/r/TfDsL9/1

扩展

(?m)^.*?ALLCAPSTEXT.*(?:(?!^.*?ALLCAPSTEXT)[\S\s])*

答案 1 :(得分:0)

<p>\d+\.\s[A-Z]+.*<\/p>(\n+<p>\d+\.\s[a-z]+.*<\/p>)+