匹配/ Hello / World的正则表达式

时间:2014-07-15 16:50:37

标签: regex oracle

我需要一个正则表达式来匹配/ Hello / World中的 Hello

I tried
\/\w+/

But this matches
/Hello/

有什么想法吗?

我正在使用Oracle SQL。

4 个答案:

答案 0 :(得分:1)

如果您不使用Javascript,可以使用后面的内容:

(?<=\/)\w+

<强> Online Demo

如果您使用的是Javascript,那么您可以使用lookahead,虽然这也适用于其他语言:

\w+(?=\/)

<强> Online Demo

答案 1 :(得分:1)

您只需使用capturing group捕获所需的匹配上下文,然后返回匹配的组即可访问您的匹配结果。

/(\w+)/

根据您使用的Oracle版本,请尝试以下操作:

SELECT regexp_substr('/Hello/World', '/(\w+)/', 1,1,NULL,1) from dual;

最后一个参数表示要返回的捕获组的编号。

答案 2 :(得分:0)

使用正则表达式\/(\w+)\/。然后,您可以从正则表达式匹配器中检索此captured group

在Java中,例如:

Pattern p = Pattern.compile("\\/(\w+)\\/");
Matcher m = p.matcher("/Hello/World");
if (m.find())
    System.out.println(m.group(1)); // Hello

或Python:

In [5]: re.match(r'\/(\w+)\/', '/Hello/World').group(1)
Out[5]: 'Hello'

答案 3 :(得分:0)

如果您的意图是在Oracle SQL中执行此操作,可能是regexp_replace 功能就是你所需要的:

regexp_replace ('/Hello/World', '/(\w+)/\w+', '\1' )

说明:

您识别的问题似乎非常适合regexp_replace 功能:

按字符串搜索:'/(\w+)/\w+'

替换为字符串:'\1'

此处,'\1'只是在搜索中引用的字符组'(\w+)' 串。

这只是hwnd解决方案的一个细微变化。 Oracle SQL没有先行断言功能。