Regex за исключением конкретных слов

Один образ мыслей об этом - это:

O (N^2) означает для каждого элемента, Вы делаете что-то с любым элементом, таким как сравнение их. Пузырьковая сортировка является примером этого.

O (N регистрируют N) средства для каждого элемента, Вы делаете что-то, что только должно посмотреть на журнал N элементов. Это обычно, потому что Вы знаете что-то об элементах, которые позволяют Вам сделать эффективный выбор. Большинство эффективных видов является примером этого, таким как сортировка слиянием.

O (N!) означает делать что-то для всех возможных перестановок элементов N. Коммивояжер является примером этого, где существуют N! способы посетить узлы и решение для грубой силы состоят в том, чтобы посмотреть на общую стоимость каждой возможной перестановки для нахождения оптимальной.

6
задан Kaunteya 24 June 2019 в 11:38
поделиться

5 ответов

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

Итак, давайте создадим набор символов, которые считаются «границей»:

/[^-a-z0-9A-Z_]/        // Will match any character that is <NOT> - _ or 
                        // between a-z 0-9 A-Z 

/(?:^|[^-a-z0-9A-Z_])/  // Matches the beginning of the string, or one of those 
                        // non-word characters.

/(?:[^-a-z0-9A-Z_]|$)/  // Matches a non-word or the end of string

/(?:^|[^-a-z0-9A-Z_])(apple|orange|juice)(?:[^-a-z0-9A-Z_]|$)/ 
   // This should >match< apple/orange/juice ONLY when not preceded/followed by another
   // 'non-word' character just negate the result of the test to obtain your desired
   // result.

В большинстве разновидностей регулярных выражений \ b считается «границей слова», но стандартный список «символов слов» не включает - , поэтому вам нужно создать собственный. Он мог бы соответствовать / \ b (яблоко | апельсин | сок) \ b / , если бы вы также не пытались поймать - ...

Если вы только Тестирование однословных тестов вы можете выполнить гораздо проще:

/^(apple|orange|juice)$/ // and take the negation of this...
3
ответ дан 9 December 2019 в 22:36
поделиться
\A(?!apple\Z|juice\Z|orange\Z).*\Z

будет соответствовать всей строке, если она не состоит только из одного из запрещенных слов.

В качестве альтернативы, если вы не используете Ruby или уверены, что ваши строки не содержат разрывов строки или вы установили параметр, при котором ^ и $ не совпадают в начале / конце строк

^(?!apple$|juice$|orange$).*$

, также будет работать.

0
ответ дан 9 December 2019 в 22:36
поделиться

Если вы действительно хотите сделать это с помощью одного регулярного выражения, вы можете найти полезным поиск (особенно отрицательный просмотр вперед в этом примере). Регулярное выражение, написанное для Ruby (некоторые реализации имеют другой синтаксис для поиска):

rx = /^(?!apple$|orange$|juice$)/
9
ответ дан 9 December 2019 в 22:36
поделиться

Что-то вроде (PHP)

$input = "The orange apple gave juice";
if(preg_match("your regex for validating") && !preg_match("/apple|orange|juice/", $input))
{
  // it's ok;
}
else
{
  //throw validation error
}
-1
ответ дан 9 December 2019 в 22:36
поделиться

Это немного похоже на путь:

((?:apple|orange|juice)\S)|(\S(?:apple|orange|juice))|(\S(?:apple|orange|juice)\S)
0
ответ дан 9 December 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: