开发者

How to write this Regex

HTML:

<dt>
    <a href="#profile-experience" >Past</a>
</dt>
<dd>
    <ul class="past">
        <li>
            President, CEO &amp; Founder <span class="at">at</span> China Connection
        </li>
        <li>
            Professional Speaker and Trainer <span class="at">at</span> Edgemont Enterprises
        </li>
        <li>
            Nurse &amp; Clinic Manager <span class="at">at</span> <span>USAF</span>
        </li>
    </ul>
</dd>​​​​​

I want match the <li> node. I write the Regex:

<dt>.+?Past+?</dt>\s+?<dd>\s+?<ul class=""past"">\s+?(?:<li>\s*?([\W\w]+?)+?\s*?</li>)+\s+?&开发者_StackOverflowlt;/ul>

In fact they do not work.


No not parse HTML using a regex like it's just a big pile of text. Using a DOM parser is a proper way.


Don't use regular expressions to parse HTML...


Don't use a regular expression to match an html document. It is better to parse it as a DOM tree using a simple state machine instead.

I'm assuming you're trying to get html list items. Since you're not specifying what language you use here's a little pseudo code to get you going:

Pseudo code:

while (iterating through the text)

    if (<li> matched)

        find position to </li>
        put the substring between <li> to </li> to a variable

There are of course numerous third-party libraries that do this sort of thing. Depending on your development environment, you might have a function that does this already (e.g. javascript).


Which language do you use?

If you use Python, you should try lxml: http://lxml.de. With lxml, you can search for the node with tag ul and class "past". You then retrieve its children, which are li, and get text of those nodes.


If you are trying to extract from or manipulate this HTML, xPath, xsl, or CSS selectors in jQuery might be easier and more maintainable than a regex. What exactly is your goal and in what framework are you operating?


please learn to use jQuery for this sort of thing

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜