2015-03-10 2 views
2

я получил строку вроде следующего:Регулярное выражение, чтобы соответствовать все, но оставить некоторые определенные матчи

(GDRO WHERE PERIOD MONTH = 0 AND PERIOD QUARTER = 12) WHERE NDRO() AND KST 

Я написал следующее регулярное выражение, которое оставляет из числа, символы и функции и соответствует только слова.

/(?![A-Za-z]+\(\))([A-Za-z_](?:\d*))+/g 

Если применяется к строке выше, результат

GDRO, WHERE, PERIOD, MONTH, AND, PERIOD, QUARTER, WHERE, AND, KST 

То, что я также хочу, чтобы мой регулярное выражение уйти из конкретных слов, т.е.

(WHERE|PERIOD|MONTH|AND|WHERE) 

Есть ли способ, что я может указать это в моем регулярном выражении, чтобы оставить эти данные и сопоставить каждое другое слово, т.е. получить следующий результат?

GDRO, KST 
+0

Что должно произойти с 'QUARTER'? – nhahtdh

+0

Его также следует игнорировать. Забыл положить его в список игнорирования. –

ответ

1
\b(?!(?:WHERE|PERIOD|MONTH|AND|WHERE)\b)(?![A-Za-z]+\(\))([A-Za-z_](?:\d*))+\b 

Попробуйте this.See демо.

https://regex101.com/r/iS6jF6/1

+0

Почему downvoted ??? – vks

+0

Не я. Спасибо, это работает. –

+0

@KamranAhmed рад, что это сработало :) – vks

1

Да, это возможно, просто обновить ваш отрицательный предпросмотр, добавив WHERE, PERIOD, MONTH, AND и WHERE. Регулярное выражение:

/(?:(?![A-Za-z]+\(\)|WHERE|PERIOD|MONTH|AND|WHERE))(\b(?:[A-Za-z_](?:\d*))+\b)/g 

Тестовый случай соответствует:

MATCH 1 
1. [0-4] `GDRO` 
MATCH 2 
1. [39-46] `QUARTER` 
MATCH 3 
1. [70-73] `KST` 

Regex demo.

+0

почему downvote? – Matyas

+1

Не был ли я, однако, чтобы компенсировать это. Спасибо за Ваш ответ :-) –

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