2015-07-15 4 views
1

Я борюсь с этим в Oracle.Все между двумя предложениями с круглыми скобками

Я хочу, чтобы все между "Command (" и "), которые выполняются"

Строка:

Command (Grep) ex.txt) выполняется user1 @ сервере Server03, как корень @ сервере Server03

Желаемый результат:

Grep \) ex.txt

Я тестирую де регулярное выражение на этом сайте: https://regex101.com

Эту работу решения на месте, но не в моем выборе:

(? < = Command() (= \ е?))

Выберите используемый (.?):.

выберите REGEXP_SUBSTR (MSG "(< = Command() (?) (? = \ е)), 1) в качестве команды из кОМАНД

Выражение (([^)] +)) работы, за исключением ш а в строке есть и другой «)». Вот почему я пытаюсь использовать метод между строками, а не только в круглых скобках.

Большое спасибо

+0

SimPE 'Command \ (.? (*) \) Выполняется by' должны работать, а также' (<= Command \() (. *?) (? = \), выполненный) ' – sln

ответ

4

Вы можете использовать REGEXP_SUBSTR, чтобы соответствовать все Command (...) executed by выражения и извлечь необходимую часть с помощью захвата группы:

Настройка SQL Fiddle

Oracle 11g R2 Схема:

CREATE TABLE Data (Str) AS 
SELECT 'Command (grep) ex.txt) executed by [email protected] as [email protected]' FROM DUAL; 

Запрос 1:

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

Results:

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

Жадный оператор '.* 'будет работать одинаково хорошо, как неохотно'. *? 'для этого конкретного случая. – YoYo

+0

'. *?' Был специально выбран для случая, когда две строки объединены в один - т.е. '' Command (A), выполняемый ... Command (B), выполняемый ... ''В этом случае он будет только получать результат «A», а не «A», выполняемый ... Command (B' (и может использовать параметр вхождения функции для получения результата «B», если требуется). – MT0

-1

\(.*\) - это будет работать.

>>> s 
'Command (grep) ex.txt) executed by [email protected] as [email protected]' 
>>> re.search(r'\(.*\)', s).group() 
'(grep) ex.txt)' 
+0

Но не сработает:' 'Command (grep) ex.txt), выполняемый (user1 @ server03) как (root @ server03) '' – MT0

Смежные вопросы