2016-04-02 11 views
1

におけるPostgreSQLの正規表現の先読み/後読み<code>regexp_matches</code>を使用してposgres

中のような内容でテキストフィールドを持っている:[A1、A2、A3、のリストを取得しようとすると

unique_string_abc 
<ul> 
    <li>a1</li> 
    <li>a2</li> 
    ... 
    <li>an</li> 
</ul> 
blah 
blah 
<ul> 
    <li>b1</li> 
    ... 
    <li>bn</li> 
</ul> 
blah 
blah 
<ul> 
    <li>c1</li> 
    ... 
    <li>cn</li> 
<ul> 
blah 

...、 ]しかし

c1..cn、b1..bnを除外するこれまでのところ、私が使用して、それを分割<ul>...</ul>と後での間に完全な文字列を返す最初のもので、複数のサブクエリを使用してそれを取得することができました:

SELECT regexp_matches(html_text, 
'unique_string_abc\s*?<ul>\s*?(<li>.*?<\/li>)\s*?</ul>', 
'g') 

しかし、</ul>のルックアヘッドまたはlookbehindを使用して単一の正規表現を使用すると簡単な方法が必要だと思っていますか?

どのポインタも大変ありがとうございます。

答えて

0

2段階に圧縮しました。私は、単一のステップに圧縮された正規表現は、この問題のために特別な状況でしか使用できないと思います。 Lookbehindsは、このように数量がCN B1から[リチウムタグを含み、除外その個別[に対してA1〕



  1. を許可されていない、ゼロ幅である必要は

    ]。
    (私はして[CNにB1] [へA1]との違いは、あなたの正規表現から<UL>タグの後ろにメッセージ "unique_string_abc" であるinffered。)

    (?< = unique_string_abc \ sの<UL>) [\ s \ S] *?(/ul >)

  2. 抽出[a1からan]。

    (?< = <李>)。*(?= < /李>)

+0

ありがとう!それは私がやっていることのようなものです。それを一歩に合理化するためのクールで簡単な正規表現がほしいと思っていました – user3397554

関連する問題