我需要一个正则表达式来匹配/ Hello / World中的 Hello 。
I tried
\/\w+/
But this matches
/Hello/
有什么想法吗?
我正在使用Oracle SQL。
答案 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没有先行断言功能。