【问题标题】:RegExp get string inside stringRegEx在字符串中获取字符串
【发布时间】:2010-08-18 22:44:25
【问题描述】:

假设我们有这样的东西:

<div1>
    <h1>text1</h1>
    <h1>text2</h1>
</div1>
<div2>
    <h1>text3</h1>
</div2>

使用 RegExp,我们需要得到 text1text2 而不是 text3

如何做到这一点?

提前致谢。

编辑: 这只是一个例子。 我正在解析的文本可能只是纯文本。 我想要完成的主要事情是列出文档特定部分的所有字符串。 例如,我给出了这个 HTML 代码,因为它完全类似于我需要得到的东西。

(?siU)&lt;h1&gt;(.*)&lt;/h1&gt; 会解析所有三个字符串,但如何只获取前两个?

EDIT2: 这是另一个相当愚蠢的例子。 :)

Section1

This is a "very" nice sentence.
It has "just" a few words.

Section2

This is "only" an example.

The End

我需要第一部分的引用词,而不是第二部分的引用词。

再一次,(?siU)"(.*)" 从整个文本中返回引用的单词, 我只需要Section1Section2之间的那些。

这是"Rainmeter" application,它显然使用 Perl 正则表达式语法。

对不起,我无法更好地解释它。 :)

【问题讨论】:

  • 出现次数可以是任意的。

  • 什么标准决定了你想要什么内容?你用什么语言编程?另外,你真的不应该使用正则表达式来解析 HTML。
  • 使用Regex解析html参考这篇文章:link
  • @Marcelo Cantos:标准可能会有所不同,但对于第一个示例,我需要 部分的

    标签内的内容。我不是用任何语言编程,我只是用 Rainmeter 修改我的桌面,它在某些部分使用 RegExp。 :) 这里没什么重要的。

  • 你的问题太模糊了,没法回答。

标签: regex perl


【解决方案1】:

对于所提供的两个示例的一般情况——用于 Rainmeter 正则表达式——您可以使用:

(?siU)&lt;h1&gt;(.*)&lt;/h1&gt;(?=.+&lt;div2&gt;) 用于第一个样本和

(?siU)"(.*)"(?=.+Section2) 第二次。

请注意,Rainmeter 似乎为您逃避了一些事情,但您可能需要将上面的 " 更改为 \"

这两个都使用Positive Lookahead,但要注意:在嵌套标签/结构的情况下,或者如果有多个Section1 和Section2,这两种解决方案都会失败。正则表达式不是这种解析的最佳工具。

但也许这足以满足您当前的需求?

【讨论】:

  • 问题是,存在嵌套标签,您的解决方案不起作用。但是通过修改它,我设法解决了我的问题。即使有嵌套的标签/结构,(?siU)&lt;h1&gt;(.*)&lt;/h1&gt;.*(?=.+&lt;div2&gt;) 也会起作用。非常比你。如果没有你的帮助,我将无法做到。 :D
【解决方案2】:

使用 DOM 库和getElementsByTagName('div'),您将得到一个 nodeList。您可以使用 -&gt;item(0) 引用第一项,然后使用 div 作为上下文节点 getElementsByTagName('h1'),使用 -&gt;nodeValue 属性获取文本。

【讨论】:

  • 啊,但是他没有使用div标签。他使用了div1div2(¿等?)。 :)
  • 我认为他的意思是div,但提供的数字表示第一,第二。他也可以在 h1 上执行getElementsByTagName 并获取 nodeList 中的前 2 个 nodeValues。
  • 由于h1 的数量各不相同,而且我需要所有这些,因此只抓住前两个不是解决方案。至于div1div2混淆,看第二个例子,看看我需要什么。 :)
猜你喜欢
  • 2011-08-21
  • 2014-06-24
  • 1970-01-01
  • 2023-01-07
  • 2013-03-10
  • 2015-09-17
  • 2020-06-10
  • 2014-11-18
  • 2015-06-24
相关资源
最近更新 更多