posgres中的正则表达式向前看/向后看

时间:2016-04-02 01:26:28

标签: regex postgresql pattern-matching regex-lookarounds

在PostgreSQL中使用LocalId

有一个包含以下内容的文本字段:

regexp_matches

尝试获取[a1,a2,a3,...,an]列表但排除b1..bn,c1..cn

到目前为止,我能够使用多个子查询来获取它,第一个在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 之间返回完整的字符串,然后使用以下命令将其拆分:

<ul>...</ul>

但是想到SELECT regexp_matches(html_text, 'unique_string_abc\s*?<ul>\s*?(<li>.*?<\/li>)\s*?</ul>', 'g') 使用前瞻或后瞻的单一正则表达式必须有一种更简单的方法吗?

任何指针都会非常感激!

1 个答案:

答案 0 :(得分:0)

我把它压缩成两步。我认为压缩成单步的正则表达式只能在某些特殊情况下使用,因为这个问题。

  

Lookbehinds需要为零宽度,因此不允许使用量词



  1. 将包含li标签的[a1更改为a]并排除[b1至cn] (我认为[a1到an]和[b1到cn]之间的区别是消息&#34; unique_string_abc&#34;在你的正则表达式的&lt; ul&gt;标记后面。)

    (小于?= unique_string_abc \ S&LT; UL&GT;)[\ S \ S] *(= LT; / UL&GT)?

  2. 提取[a1到an]。

    (小于?= LT;李&GT)。*(= LT; /立GT)