| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Регулярные выражения > проблемы с регулярным выражением |
| Автор: MARIA123 20.10.2011, 22:34 | ||
| Задача такая: выделить в строке кусок между "text=" и "&". Например, из строки asdghtext=abcd&fgh надо выделить abcd. Эти строки хранятся в файле. Для этого я использую регулярное выражение $line =~ m{\w+text=(\w+)&\w+}; Потом пытаюсь напечатать результат в файл для проверки print "$&\n" В итоге получаю пустой файл, то есть регулярное выражение ничего не находит. В чем проблема? Вот весь код
|
| Автор: JAPH 20.10.2011, 22:44 | ||
| УМВР, однако есть пара замечаний: -- $& равна всему совпадению, чтобы получить только то, что в скобках, нужно использовать $1; -- желательно поставить if, если есть вариант, когда в строке нету "text=...&"; -- если строка начинается с "text=", или заканчивается на "&", или между ними кусок содержит не только алфавитно-цифровые символы, то регулярка не совпадет. Если так и задумано, то ок, если нет, то
Возможно, проблема не в этом куске кода. |
| Автор: MARIA123 20.10.2011, 23:32 |
| Спасибо, часть ошибок исправила. А возможно ли в регулярном выражении указать, что в начале строки может быть все что угодно,кроме слова text ? [^text] запретит и строку ttttext Добавлено через 11 минут и 32 секунды [^(text)]+ тоже работать не хочет |
| Автор: JAPH 20.10.2011, 23:54 | ||||||||
| Заработало? Пишет в файл? Квадратные скобки совпадают с одним символом, так что [text] и [tex] это либо "t", либо "e", либо "x". Если нужно запретить строку, то можно использовать
|
| Автор: MARIA123 21.10.2011, 00:05 |
| Интересные решения) у меня в итоге получилось так ^(?:.+text=([^&]+)&[\d\D]+) т.е. перед text может идти любой "мусор" |
| Автор: JAPH 21.10.2011, 00:11 |
| Я бы сказал, не может, а должен, ибо стоит квантификатор +, причем жадный, т.е. если в строке несколько подходящих text=...&, будет найдено самое правое. Конструкция (?: ) тут лишняя, [\d\D] это просто точка (с модификатором /s, иначе точка не совпадает с символом "\n"). |
| Автор: MARIA123 21.10.2011, 00:36 |
| А если вхождений text=...& несколько, как их все найти? Не судите строго, первый раз мучаю регулярные выражения |
| Автор: alezzz 21.10.2011, 08:08 |
Не используйте жадный квантификатор. Покажите пример текста из по которому ведется поиск, и желательно пример приближенный к реальности, т.е. встречаются ли цифры в тексте, другие символы, как он расположен в строках (по одному на строку или несколько) и т.д. |
| Автор: MARIA123 21.10.2011, 09:16 |
| Большое спасибо за помощь.Справилась. |