2016-07-27 4 views
1

У меня есть строка, состоящая из нескольких блоков из 4 подстрок, разделенных символом |. В качестве примера возьмите:Регулярное выражение - Исключая символ разделителя. *

| 255 | UpdatePanel | updatePanel1 | somecontent1234 |

Скорее всего, будет несколько блоков Непрерывные из 4 строк

| 255 | UpdatePanel | updatePanel1 | somecontent1234 | 256 | UpdatePanel | updatePanel2 | someOtherContent |

Теперь мне нужно регулярное выражение, которое соответствует каждому из этих блоков

\|([1-9]+)\|(UpdatePanel)\|(updatePanel1|updatePanel2)\|(.*)\| 

Проблема заключается в том, это, кажется, соответствии всего примера строки выше, а не 2 матчей 4 подстрок

Должен ли я как-то исключать разделитель (|) из. * Или это что-то еще?

+0

Замените '. *' На '[^ |] *', и я считаю, что '' '' 'перед' (. * 'Является опечаткой. –

ответ

1

Вы можете заменить жадные соответствия точек с инвертированным символьного класса:

\|([1-9]+)\|(UpdatePanel)\|(updatePanel1|updatePanel2)\|([^|]*) 

См regex demo

[^|]* модель будет соответствовать другим ноль или больше символов, чем |. Таким образом, даже нет необходимости использовать \| в конце.

Обратите внимание, что вы можете уменьшить размер (updatePanel1|updatePanel2) как (updatePanel[12]), или даже (updatePanel\d+).

+1

Спасибо, что работает отлично! Вам нужно подождать 10 минут, прежде чем я смогу принять ответ. – user66875

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