2015-01-15 2 views
0

Что такое REGEX принять строку, как этоREGEX-Match символы, присутствующие в строке

  • начинается с EDO
  • имеет много символов (слова, цифры, hypehns) в период между
  • не содержат 24 или | (труба)

Пример: должен соответствовать

edo-<<characters>>-<<characeters>>-<<numbers>> 

НО НЕ

edo-<<characters>>-<<characeters>>-<<numbers>> | <<characeters>>- <<characeters>>- <<numbers>> 

Строка не имеет постоянной длины

+0

* не содержит 24 * весьма расплывчатый. что если '-24-' и '-124-', которые должны быть выполнены? – nu11p01n73R

ответ

0
^EDO(?!.*(?:(?<!\d)24(?!\d)|\|))[a-zA-Z0-9 -]+$ 

Try this.This должен work.Use флаг gmi.

См. Демонстрационную версию.

https://regex101.com/r/fA6wE2/37

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
^      the beginning of the string 
-------------------------------------------------------------------------------- 
    EDO      'EDO' 
-------------------------------------------------------------------------------- 
    (?!      look ahead to see if there is not: 
-------------------------------------------------------------------------------- 
    .*      any character except \n (0 or more times 
         (matching the most amount possible)) 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture: 
-------------------------------------------------------------------------------- 
    (?<!      look behind to see if there is not: 
-------------------------------------------------------------------------------- 
    \d      digits (0-9) 
-------------------------------------------------------------------------------- 
)      end of look-behind 
-------------------------------------------------------------------------------- 
    24      '24' 
-------------------------------------------------------------------------------- 
    (?!      look ahead to see if there is not: 
-------------------------------------------------------------------------------- 
    \d      digits (0-9) 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
    |      OR 
-------------------------------------------------------------------------------- 
     \|      '|' 
-------------------------------------------------------------------------------- 
    )      end of grouping 
-------------------------------------------------------------------------------- 
)      end of look-ahead 
-------------------------------------------------------------------------------- 
    [a-zA-Z0-9-]+   any character of: 'a' to 'z', 'A' to 'Z', 
         '0' to '9', '-' (1 or more times (matching 
         the most amount possible)) 
-------------------------------------------------------------------------------- 
    $      before an optional \n, and the end of the 
         string 
+0

модификатор должен быть «gmi», иначе он будет соответствовать только EDO not edo. Вы можете попробовать это: https://regex101.com/r/wJ0hE0/1 – shibli049

+0

'есть много символов (слов, чисел, hypehns) между', я не знаю, откуда это место. –

+0

@ AvinashRaj словами, я предполагаю, что это подразумевается автоматически. – vks

1

negative look ahead поможет вам решить, если строка оленья кожа содержит 24 или |

Регулярное выражение можно записать в виде

/^edo(?!.*(24|\|))[-a-zA-Z0-9]+$/i 

Regex Demo

Как это соответствует

  • ^ Якоря регулярных выражений в начале строки

  • edo Якорь гарантирует, что строка начинается с edo

  • (?!.*(24|\|)) смотреть вперед утверждение. Он проверяет, не содержит ли строка 24 или |. Если он не содержит, то продолжается с оставшимся шаблоном. Если он содержит, отбрасывается матч

  • [-a-zA-Z0-9]+ соответствий номера алфавитов или -

  • $ якоря регулярное выражение в конце строки.

+1

Это не будет соответствовать линиям с '124', а также – vks

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