2015-06-29 2 views
0

Я пытаюсь узнать кое-что о Regex. Я начинаю с попытки скрыть некоторые совпадения для девятизначного числа, например SSN, но пусть все девятизначные числа имеют слово «порядок» или «номер маршрута», но кажется, что только строки, которые имеют одинаковые длина будет работать. Есть ли способ обойти это без создания нескольких строк? Благодаря!Регулярные символы регулярных выражений?

(?<!(Order:\s|Routing\snumber:\s)) 
(?!000|666)([0-6]\d\d|7[01256]\d|73[0123]|77[012]) 
([-]?) 
([1-9]{2}) 
\3 
([1-9]{4}) 
(?!([\w&/%"-])) 

Для блокировки из ПЛА, это, кажется, работает ^(?!000)(?!666)(?!9)\d{3}([- ]?)(?!00)\d{2}\1(?!0000)\d{4}$ , но я хочу, чтобы не блокировать любые 9 цифр номера, которые имеют слова «порядка» или «номер маршрута» перед ними.

+1

Это регулярное выражение - беспорядок. Я также не понимаю проблему. Я бы начал с упрощения регулярного выражения следующим образом: http://pastebin.com/TuPB49uj – HamZa

+1

Этот вопрос будет легче ответить, если вы: (1) создали [минимальное тестовое регулярное выражение] (http://stackoverflow.com/ help/mcve), это намного проще, чем тот, который у вас есть в настоящее время, (2) опубликуйте несколько примеров с этим регулярным выражением того, что вы хотите и не хотите соответствовать (вместе с результатами, которые вы на самом деле получаете), (3) post это регулярное выражение с примерами на [онлайн-тесте регулярных выражений] (https://www.google.ch/search?q=regex%20tester) и включить ссылку на это в вопросе (но регулярное выражение и примеры должны быть в вопрос сам по себе). – Dukeling

+2

@HamZa: вы уверены, что '[1-9] {2}' всегда совпадает с '(?! 00) [0-9] {2}'? –

ответ

1

Многие двигатели регулярных выражений требуют, чтобы lookbehind имел фиксированную длину и отказывается выполнять переменную длину lookbehind; если это имеет место для вас, вы должны увидеть предупреждение. Если вы не видите предупреждения, скорее всего, проблема в том, что ваше регулярное выражение просто не будет так, как вы думаете.

Однако, как правило, возможно, чтобы lookbehinds просто соответствовал тексту, который вы предпочитаете считать в качестве lookbehind, затем отбрасывайте/игнорируете его, когда вы проверяете захват или объект соответствия.

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