2015-01-12 3 views
0

Я как бы застрял в очень простом регулярном выражении. Я уже пробовал много чего, но без результата, поэтому я пойду с простым:PHP Regex для получения строки между # и #

Я хочу получить многострочный результат (для замены его позже, но я уже написал эту часть, и он работает хорошо), который предполагается, что между символом «#». здесь образец файла:

# Zulu 9.8.9.8 
add method 9.8.9.8 {ssh} {telnet} 
add password 9.8.9.8 {jouejoue} 
add user 9.8.9.8 {Zekrom} 
# Zulu 1.1.1.1 
add method 1.1.1.1 {ssh} {telnet} 
add password 1.1.1.1 {mypassword} 
add user 1.1.1.1 {adminstyle} 
# Zulu 2.2.2.2 
add method 2.2.2.2 {ssh} {telnet} 
add password 2.2.2.2 {diffpassword} 
add user 2.2.2.2 {pixyokadi} 

Я использовал опцию «S» как «/ регулярное выражение/с» так «\ п» будет рассчитывать на «» голец. Я хотел использовать [^ #], но он отменил вариант 's'. Я не знаю, почему, но при использовании этого один:

/#.*#/s 

Это занимает 2 первый абзац, игнорируя «#» в строке «# Zulu 1.1.1.1», и я не понимаю, почему. Я попытался использовать захват-скобки тоже без успеха. Я использовал для поиска IP с регулярным выражением, но поскольку я даже не могу получить абзац, который хотел, я использовал более простой. Может ли кто-нибудь объяснить это мне?

https://regex101.com/r/tI4hQ7/2

Спасибо за чтение.

+1

Каков ваш ожидаемый выход? –

+0

То, что hsz предлагает мне. –

ответ

2

Попробовать следующее регулярное выражение:

/#[^#]*/g 

g модификатор делает глобальный поиск.

Также с [^#]* Вы не сможете понаблюдать за происходящими ниже событиями # - всего на все остальное, чем #.

Пример:

https://regex101.com/r/tI4hQ7/5

+0

@AvinashRaj Это правда. Ред. – hsz

+0

Поскольку вопрос задает (или, может быть, просто случается сказать, кто знает?) _between #_, вы можете ограничить результат, выполнив '/ (? <= #) [^ #] */G', исключая октетроп- знаки хеш-фунта на обоих концах. –

+0

Правильно, Янус, я хотел выбрать все и добавил бы скобки для вывода для вывода дополнительных #. Thx для ваших ответов. –

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