2014-10-30 5 views

ответ

0

Вы можете сделать это, используя отрицательный результат.

(?!.*regexp2)regexp1 

.* необходимо, чтобы убедиться, что regexp2 нет нигде в строке. Напр.

regexp2="bb" и regexp1 ="cc". Здесь .* не требуется, так как это просто. Но если

regexp2="bb" и regexp1="ccbbaa" Здесь .* необходимо, чтобы убедиться, что bb нет нигде в строке.

+1

Не могли бы вы объяснить, почему нам нужно «. *»? –

+0

он не будет работать в нескольких случаях. @VictorRonin вы могли бы привести пример? –

+1

Подождите, ваше регулярное выражение запрещает 'regexp2' в точке или после точки, где' regexp1' соответствует, но запрещает ли это 'regexp2', которое появляется до этого? – sawa

3

Регулярное выражение vks's делает точку, но не совсем корректно. Сделайте это:

/\A(?!.*#{regexp2}).*#{regexp1}/ 
1

Вы можете сделать это немного короче с:

str[/regexp1/] && !str[/regexp2/] ? "aa" : "bb" 

Другие решения я вижу здесь ненужная кошмар для парня, который должен прочитать код. Избежать их.

+1

pg, это действительно не касается вопрос. Вопрос заключается не в том, следует ли использовать регулярное выражение для разума, если это необходимо для объединения двух регулярных выражений. Я сомневаюсь, что любой, кто читает это, ответит на этот вопрос утвердительно. Однако может быть полезно научиться, изучая предлагаемые решения, возможные самородки, которые могут иметь приложение в других ситуациях. –

+0

@ Cary Я не согласен, я думаю, что вы ободряете плохой код. – pguardiario