这是一个示例文本:
[ame = \“watch?v = 12345 \”] YouTube - blah lorem blah blah [/ ame] Lorem Ipsum只是印刷和排版行业的虚拟文本。 Lorem Ipsum自此以来一直是业界标准的虚拟文本 16世纪,当一个未知的打印机拿出一个类型的厨房并乱扰它 制作一本样本书。 [ame = \“watch?v = 123456 \”] YouTube - 等等 blah blah [/ ame] 它不仅存活了五个世纪,而且还存活了下来 电子排版的飞跃,基本保持不变。 它在20世纪60年代随着Letraset床单的推出而普及 包含 [ame = \“watch?v = 1234 \”] YouTube - blahΩblahlorem [/ ame] Lorem Ipsum段落,最近还有桌面版 像Aldus PageMaker这样的出版软件,包括Lorem的版本 存有。
我需要一个只与[ame] [/ ame]匹配的正则表达式,其中包含单词 lorem 。此外,在上一个[ame]实例中,有一个特殊字符(希腊字母Omega)Ω。我需要一个正则表达式来匹配[ame]和omega(Ω)里面。
我试过(\[ame=[^\]]*\])([lorem])(\[\/ame\])
但没有任何反应。请检查here
答案 0 :(得分:0)
快速解决方案:
(\[ame=[^\]]*\])[^[]*?lorem[^[]*?(\[\/ame\])
我没有以任何方式优化它。
答案 1 :(得分:0)
答案 2 :(得分:0)
由于您没有提及有关群组捕获的任何信息,因此第一个解决方案不会使用它们:
/\[ame[^\[]+lorem[^\[]*\[\/ame\]/g
打破这个局面:
\[ame
:开始与" ame"打开标签[^\[]+
:继续匹配,直到第一次" [" lorem
:匹配" lorem" [^\[]*
:继续匹配,直到第一次" [" \[\/ame\]
:结束与#34; ame"结束标签特别的酱汁是两个贪婪的比赛,结合了#l; lorem"只会匹配一个" ame"标签包含" lorem"。这种方法并不关心" lorem"发生在标签内(它可能在链接而不是文本中)。
第二个解决方案是,如果你关心捕获组(比如链接和文本值),那么" lorem"仅出现在文本值中。基于第一个解决方案的相同概念,但添加组捕获给出:
/\[ame=\\"([^"]+)\\"\]([^\[]*lorem[^\[]*)\[\/ame\]/g
打破这一个:
\[ame=\\"([^"]+)\\"\]
:开始与" ame"使用组捕获为链接值打开标记([^\[]*lorem[^\[]*)
:匹配包含" lorem"的文本值第二组捕获\[\/ame\]
:结束与#34; ame"结束标签文本值匹配类似于之前解决方案的匹配,但现在认为文本值可能只是" lorem" (因为之前的解决方案只匹配整个标签)。
答案 3 :(得分:0)
所以其他答案仍有相当大的缺陷(不能在[
标签之间使用符号ame
,而且omega部分也会被忽略,但很容易做到。)
该问题类似于正则表达式HTML解析。如果您希望[ame]
和[/ame]
之间的信息,则标签可以在文档过程中重复。这个问题在这里展示:https://regex101.com/r/rC3eK4/1,标签将“跳转”到下一个标签以满足设置要求。为避免这种情况,其他答案指出他们不会在字符列表中允许[
。但是,谁能说你不能拥有不同的标签呢? [ame] this is [b]bolded[/b][/ame]
。
我建议采用两步解决方案。首先使用[ame]
提取所有\[ame.*?\].*?\[\/ame\]
代码的内容。 https://regex101.com/r/rC3eK4/2。即使内部带有adition标记,也会提取ame
标记。
然后,看看您是否可以将内容与\[ame.*?\](?:(.*?lorem.*?)|(.*?Ω.*?))\[\/ame\]
提出的内容进行匹配,如https://regex101.com/r/rC3eK4/3所示。它还将捕获您在$1
捕获组中所需的内容。