当前位置:  开发笔记 > 前端 > 正文

正则表达式 - 使用嵌套div查找id的div内容

如何解决《正则表达式-使用嵌套div查找id的div内容》经验,为你挑选了2个好方法。

在任何人问之前,我没有做任何类型的屏幕抓取.

我正在尝试解析一个html字符串以找到具有特定id的div.我不能为我的生活让这个工作.以下表达式在一个实例中有效,但在另一个实例中没有.我不确定它是否与html中的额外元素有关.

\s*?(?>(?!  | 
) | (?) |
(?<-DEPTH>) | .?)*(?(DEPTH)(?!))

它正确地找到具有正确id的第一个div,但它然后在第一个结束div处关闭,而不是相关的div.

begining content
some other stuff
other stuff here
more stuff

这应该带回来

some other stuff
other stuff here
more stuff

,但由于某种原因,它不是.它带回来:

   
some other stuff
other stuff here

有没有人有一个更容易表达来处理这个?

为了澄清,这是在.NET中,我正在使用DEPTH关键字.你可以在这里找到更多细节.



1> Cybis..:

你是否要求一个能够跟踪嵌套在DIV标签内的DIV标签数量的正则表达式?我担心正则表达式是不可能的.

您可以使用正则表达式来获取第一个DIV标记的索引,然后循环遍历该字符串中的字符,从该索引开始,并保持打开div标记的数量.当您遇到一个关闭的div-tag,并且count为零时,那么您在包含所需子字符串的字符串中有起始和结束索引.



2> pro3carp3..:

在.NET中,您可以这样做:

(?
()

  (?>
      .*?
    |
      .*?
depth) | .*?
(?>-depth) )*) (?(depth)(?!)) .*?

您必须使用单行选项.以下是使用控制台的示例:

using System;
using System.Text.RegularExpressions;

namespace Temp
{
    class Program
    {
        static void Main()
        {
            string s = @"
begining content
some other stuff
other stuff here
more stuff
"; Regex r = new Regex(@"(?()(?>.*?|.*?
depth)|.*?
(?>-depth))*)(?(depth)(?!)).*?", RegexOptions.Singleline); Console.WriteLine("HTML:\n"); Console.WriteLine(s); Match m = r.Match(s); if (m.Success) { Console.WriteLine("\nCaptured text:\n"); Console.WriteLine(m.Groups[4]); } Console.ReadLine(); } } }

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有