括号

时间:2015-07-15 23:45:33

标签: regex oracle oracle11g

我在甲骨文中苦苦挣扎。

我希望“

执行”Command(“和”)之间的所有内容

字符串:

  

命令(grep)ex.txt)由user1 @ server03以root @ server03

执行

期望的结果:

  

grep \)ex.txt

我在这个网站上测试de regex:https://regex101.com

此解决方案适用于网站但不在我的选择中:

  

(?< = Command()(。?)(?= \ e ))

选择使用:

  

选择          REGEXP_SUBSTR(MSG,'(?< = Command()(。?)(?= \ e ))',1)as command   来自COMMANDS

表达式(([^)] +))有效,除非字符串中有另一个“)”。这就是为什么我在尝试字符串之间的方法,而不仅仅是在括号内。

非常感谢

2 个答案:

答案 0 :(得分:4)

您可以使用REGEXP_SUBSTR匹配整个Command (...) executed by表达式,并使用捕获组提取所需的部分:

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE Data ( Str ) AS
SELECT 'Command (grep ) ex.txt) executed by user1@server03 as root@server03' FROM DUAL;

查询1

SELECT REGEXP_SUBSTR( Str, 'Command \((.*?)\) executed by', 1, 1,'i', 1 ) AS Match
FROM Data

<强> Results

|         MATCH |
|---------------|
| grep ) ex.txt |

答案 1 :(得分:-1)

\(.*\) - 这会有用。

>>> s
'Command (grep ) ex.txt) executed by user1@server03 as root@server03'
>>> re.search(r'\(.*\)', s).group()
'(grep ) ex.txt)'