2015-06-01 3 views
0

Мне нужно регулярное выражение, которое проверяет, начинается ли строка с "V ", а затем, если в ней также есть слово 'BENCH' или 'EARCX'.Нужно написать регулярное выражение AND в ruby ​​

Мое текущее выражение записано как: V\s|BENCH|EARCX
однако я понял, что она принимает ничего с 'V ' или BENCH или EARCX. Есть ли условие AND для регулярных выражений в ruby? Если да, то как я могу проверить его как для 'V ', так и для BENCH или EARCX

Любая помощь была бы принята с благодарностью!

+0

Чтобы попробовать, вы можете использовать редактор регулярных выражений Ruby на http://rubular.com/ – Sebastian

ответ

0

Если порядок имеет значение (как вы говорите, "начинается с V"), вы можете просто написать:

/V.*(BENCH|EARCX)/ 

Если нет, то вы можете обернуть в другом чередовании:

/V.*(BENCH|EARCX)|(BENCH|EARCX).*V/ 

Но это становится громоздким (особенно, если у вас есть несколько различных факторов и, поэтому лучше использовать lookaheads:

/(?=.*V)(?=.*(BENCH|EARCX))/ 

Это будет соответствовать VBENCH, EARCXfooV ... и является решением для общего случая И в любом месте строки.

+0

Спасибо большое! Прекрасно работает –

0

Вам не нужно and, когда вы пишете что-то последовательно автоматически and.

попробовать:

V\s(BENCH|EARCX) 

он будет принимать

V BENCH
V EARCX

и отвергают

V ABCD

Или вы можете сделать пространство по желанию, если вы хотите

V(\s)?(BENCH|EARCX) 
0
^V\s.*?\b(?:BENCH|EARCX)\b.*$ 

Вы должны будете использовать анкеры. ^$ заставит регулярное выражение выполнить строгое совпадение, а не частичное совпадение.

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