1 / 1 / 0
Регистрация: 31.03.2017
Сообщений: 47
|
||||||
1 | ||||||
Вложеное регулярное выражение31.03.2017, 05:34. Показов 2241. Ответов 14
Допустим есть строка вида:
0
|
31.03.2017, 05:34 | |
Ответы с готовыми решениями:
14
Регулярное выражение из командной строки Регулярное выражение, поиск последнего вхождения Регулярное выражение: содержит ли строка текст, соответствующий шаблону K-00000000 Написать регулярное выражение для выделения из строки только одного числа на определённой позиции |
5925 / 1968 / 321
Регистрация: 10.12.2013
Сообщений: 6,801
|
||||||
31.03.2017, 08:07 | 2 | |||||
0
|
1 / 1 / 0
Регистрация: 31.03.2017
Сообщений: 47
|
|
31.03.2017, 09:55 [ТС] | 3 |
А разве это не удалит и все что находиться между <p>?
0
|
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
|
||||||
31.03.2017, 10:36 | 4 | |||||
Попробуйте так
0
|
5925 / 1968 / 321
Регистрация: 10.12.2013
Сообщений: 6,801
|
||||||
31.03.2017, 10:38 | 5 | |||||
Сообщение было отмечено zhukovia как решение
Решение
пожалуй, от регулярной жадности неплохо бы избавиться;
добавил `?` к `.+`. проверь.
1
|
1 / 1 / 0
Регистрация: 31.03.2017
Сообщений: 47
|
|
31.03.2017, 12:36 [ТС] | 6 |
Большое спасибо. Это то что нужно.
0
|
1 / 1 / 0
Регистрация: 31.03.2017
Сообщений: 47
|
|||||||||||
01.04.2017, 14:20 [ТС] | 7 | ||||||||||
Извините, немного поторопился с ответом. Вообщем это не то. Получается
0
|
5925 / 1968 / 321
Регистрация: 10.12.2013
Сообщений: 6,801
|
||||||
02.04.2017, 13:44 | 8 | |||||
Сообщение было отмечено zhukovia как решение
Решение
ну, например можно так, как предложил pka в #4
добавить модификатор e и в заменяющую часть subst вставить ещё один subst, холодно удаляющий все тэги из захваченного $2:
0
|
1 / 1 / 0
Регистрация: 31.03.2017
Сообщений: 47
|
|
03.04.2017, 08:26 [ТС] | 9 |
Попробую так когда доберусь до базы.
А так выдает ошибку. Если я правильно понял то он не может понять что за переменная $2. А разве можно подобную конструкцию ($2 =~ s [</?\w+>] []rg) запихать во вторую часть s//? Кликните здесь для просмотра всего текста
Bareword found where operator expected at -e line 1, near "s [</?\w+>] []rg"
(Do you need to predeclare s?) syntax error at -e line 1, near "s [</?\w+>] []rg " Execution of -e aborted due to compilation errors. Добавлено через 42 минуты Работает но почему то только для одной строки. Если в файле есть несколько строк то делается только первая. Подскажите, пожалуйста, как сделать для нескольких строк, куда \r\n засунуть? И &p_not& могут находиться в разных строках (открытие-закрытие)
0
|
5925 / 1968 / 321
Регистрация: 10.12.2013
Сообщений: 6,801
|
||||||||||||||||
03.04.2017, 09:45 | 10 | |||||||||||||||
Он может. И залогом этого является обрамление выражения круглыми скобками в шаблонной части составного оператора s ( substitute).
Можно. Сгодится любое выражение Perl. Я проверяю на нескольких OS свои советы перед публикацией. Этот был проверен на MacOS, Windows XP, Windows 10. Для работы в ком. строке Windows следует заменить одинарные кавычки на двойные. Приведи здесь вывод команды
(Bareword found where operator expected at -e line 1, near "s [</?\w+>] []rg") Можешь также убрать пробелы при оформлении оператора s, чтобы не дразнить гусей.
да, и во вложенном subst надо тоже применить модификатор m(multiple lines), вот так:
0
|
1 / 1 / 0
Регистрация: 31.03.2017
Сообщений: 47
|
|||||||||||
03.04.2017, 15:36 [ТС] | 11 | ||||||||||
Я это делаю на Linux CentOS
Кликните здесь для просмотра всего текста
Добавлено через 3 минуты Все равно не заработало. Только теперь.
0
|
5925 / 1968 / 321
Регистрация: 10.12.2013
Сообщений: 6,801
|
||||||
04.04.2017, 05:35 | 12 | |||||
м-да..
модификатор r(readonly) появился только в Perl 5.14, поэтому вот так:
1
|
1 / 1 / 0
Регистрация: 31.03.2017
Сообщений: 47
|
|
04.04.2017, 10:45 [ТС] | 13 |
Спасибо, этот вариант рабочий. Только вскрылся ещё один неприятный момент про который я сразу не подумал. Оказывается если &p_not& находятся не в одной строке то удаления не происходит, а у меня как раз может находится где угодно. Если это возможно то переделайте его чтобы работало и в разных строках (тэги <p> и </p> тоже не в одной строке обычно). Или скажите тогда правильно ли я понял как это работает, попробую сам разобраться.
1. Фигурные скобки и квадратные - это вместо s//. Так как вложенные выражения и нельзя поставить s// 2. (&p_not&)(.+?)\1 это тоже самое что и (&p_not&)(.+?)(&p_not&) 3. ($x=$2) =~ s здесь мы присваиваем переменной $x $2 (из левой части то что находиться между &p_not&) и делаем поиск с заменой. 4. Не совсем понял зачем мы в конце после ; пишем $x 5. [</?\w+>] [] здесь ищем <любая буква> и </любая буква> и удаляем их. Правильно? Я полагаю что в (&p_not&)(.+?)\1 нужно дописать, что-то типа [\r|\n|\s]* Вот только не понятно куда.
0
|
5925 / 1968 / 321
Регистрация: 10.12.2013
Сообщений: 6,801
|
||||||
04.04.2017, 17:41 | 14 | |||||
Сообщение было отмечено zhukovia как решение
Решение
да просто добавить модификатор s
1
|
1 / 1 / 0
Регистрация: 31.03.2017
Сообщений: 47
|
|||||||||||
05.04.2017, 05:45 [ТС] | 15 | ||||||||||
Огромное спасибо. Теперь получилось. Только надо немного умерить жадность или прямо прописать. А то у меня поудалялись и все другие теги в скобках &p_not&. Вместо
0
|
05.04.2017, 05:45 | |
05.04.2017, 05:45 | |
Помогаю со студенческими работами здесь
15
регулярное выражение Регулярное выражение Регулярное выражение Регулярное выражение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |