2

我从未在 SQL 中使用过正则表达式。如果我在 javascript 中捕获这样的内容,我如何像使用 javascriptmatch()方法中的第二个元素一样引用 pgSQL 中的捕获?

var str = 'thomas-var1="SOME VAL1" thomas=var2="SOME VAL2" thomas-var-3="the value i want" thomas-var-4="SOME_VAL4"';

var re = /thomas-var-3="(.+?)"/i;

var new_str = str.match(re);

console.log(new_str[1]);

我怎样才能把它放到一个SELECT语句中,这样我就可以说,"the value i want"从中检索值thomas-var-3

SELECT * FROM forms WHERE name LIKE '%bill%' AND category = MY REGEX CAPTURE

渲染像“

SELECT * FROM forms WHERE name LIKE '%bill%' AND category ='the value i want'
4

2 回答 2

1

您可以不使用正则表达式,而是使用hstore 扩展,例如:

str := 'thomas-var1="SOME VAL1" thomas-var2="SOME VAL2" thomas-var-3="the value i want"'
str := replace(replace(str, '=', '=>'), '" ', '", ')

select *
from forms
where name like '%bill%' and category = hstore(str)->'thomas-var-3'
于 2013-08-27T17:07:52.167 回答
1

使用 subselect 和 substring 方法,您应该能够实现您想要的:

SELECT * 
FROM firstTable 
WHERE parentCat = (SELECT cat 
                   FROM secondTable 
                   WHERE cat in substring(column_to_capture_from from 'thomas-var-3="(.+?)' ));

来自http://www.regular-expressions.info/postgresql.html

如果匹配,并且正则表达式有一个或多个捕获组,则返回与第一个捕获组匹配的文本。

于 2013-08-27T16:26:15.190 回答