在下面的例子中,我想使用正则表达式来查找<sony>
其他两行之间的 html 标签。
<table width="697" border="0">
<tr>
<td><h1 class="den_articol" itemprop="name">Your Mirror</h1></td>
</tr>
</table>
<sony>
<p class="text_obisnuit"><span class="text_obisnuit2">* Notă:</span> <a href="https://www.youtube.com/watch?v=IB4P5t3JGlg" target="_new">Simply Red - Your Mirror</a></p>
输出:
<sony>
我的正则表达式公式不起作用:
</table>\s+\n(.*?)<p class="text_obisnuit">
答案1
对于后面没有可变数量空格的情况<table>
,我可以给出一个解决方案,因为我使用不支持这种情况的后视方法来进行不捕获的测试。
我的正则表达式:
(?<=<\/table>\n)(.*?)\n(?=<p class="text_obisnuit">)
您可能会看到它的实际效果regex101.com。
不要忘记在 Notepad++ 中选中“.匹配换行符”选项。
一些解释:
环视四周 | 姓名 | 它能做什么 |
---|---|---|
(?=foo) | 展望 | 断言字符串中紧跟当前位置的是 foo |
(?<=foo) | 向后看 | 断言字符串中当前位置之前的元素是 foo |
答案2
- Ctrl+H
- 找什么:
\A[\s\S]+</table>\s+(\S+)\s+<p class="text_obisnuit">[\s\S]+\z
- 用。。。来代替:
$1
- 打钩 环绕
- 选择 正则表达式
- Replace all
解释:
\A # beginning of file
[\s\S]+ # 1 or more any character
</table> # literally
\s+ # 1 or more any spaces
(\S+) # group 1, 1 or more any character that is not a space
\s+ # 1 or more any spaces
<p class="text_obisnuit"> # literally
[\s\S]+ # 1 or more any character
\z # end of file
截图(之前):
截图(之后):
答案3
另一个解决方案:
寻找: (?s)(?-i:<!-- ARTICOL START -->|(?!\A)\G).*?\K(?<=</table>\s)(.*?)(?=\s<p class="text_obisnuit">)(?!<!-- ARTICOL FINAL -->)
下次使用这个通用公式:
(?s)(?-i:BSR|(?!\A)\G).*?\K(?<=FR1)(.*?)(?=FR2)(?!ESR)
BSR = <!-- ARTICOL START -->
FR1 = </table>\s
FR2 = \s<p class="text_obisnuit">
ESR = <!-- ARTICOL FINAL -->
让 BSR(开始搜索区域正则表达式)成为定义必须开始搜索 FR 的区域的开头的正则表达式
让 ESR(结束搜索区域正则表达式)成为隐式定义 FR 搜索必须结束的区域的正则表达式
让 FR(查找正则表达式)成为定义要搜索的字符、字符串或表达式的正则表达式
让 RR(替换正则表达式)成为定义必须替换 FR 表达式的字符、字符串或表达式的正则表达式。REPLACE RR(表示可以是 \1 \2 ...或 $1 $2 或其他
答案4
我找到了一个解决方案:
寻找: </table>\r\n\K<.*?>|(?s)\R\R(?=<p class="text_obisnuit">)