![]() |
|
Модераторы: ginnie |
![]()
|
|
| zomber |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 7.5.2011 Репутация: нет Всего: нет |
есть текст
в нем надо найти все подстроки соответствующие шаблону 1) знак ":" 2) любое количество буквоцифровых символов или "_" 3) любой символ не относящийся к 2) примерно так ":\w+\W" только последний "\W" не надо включать в результат, а я не знаю как это делается но! есть еще одно условие если эта группа находится внутри одинарных или двойных кавычек то данная группа не должна находится, всё что внутри кавычек должно игнорироваться пример. "123+':xxx' +:zzz_1*( 999 )" на выходе должна возвращаться одна строка ":zzz_1" /**/ PS в заключение хочу отменить, что использовать выражение планируется в Java но хотелось бы чтобы выражение было универсальным подходящим как для Perl, так и для Java Заранее благодарен |
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
|
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Я бы так написал:
|
|||
|
||||
| zomber |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 7.5.2011 Репутация: нет Всего: нет |
судя по всему ни это, ни предыдущее не пойдет
хотя не запускал кавычки не просто предшествующий символ между кавычкой и : может быть любое число любых символов кроме такой же кавычки видимо я привел неудачный пример попробуем иначе "123+' qwerty :xxx asdfg' +:zzz_1*( 999 )" вот так :xxx тоже не должно возвращаться а :zzz_1 - должно еще пример "123+' qwerty :xxx asdfg' +:zzz_1*( 999 ) '123 :yyy++ ' " тоже самое :xxx и :yyy игнорируем :zzz_1 возвращаем |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
совпадение во второй match группе |
|||
|
||||
| zomber |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 7.5.2011 Репутация: нет Всего: нет |
не работает Perl:
выводит
/**/ Java:
ничего не выводит /**/ должно выводиться :www_1 а не выводится ни в одном из вариантов |
||||||||||
|
|||||||||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Вторая match группа это $2.
|
|||
|
||||
| zomber |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 7.5.2011 Репутация: нет Всего: нет |
не находит когда в конце строки
видимо правильно как-то так /(['"]).*?\1|(:\w*)(\W|$)/g в остальном пока работает ЗЫ всем спасибо |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Условие нужно нормально формулировать.
"Любой символ не относящийся к 2)" я понимаю как 1 символ, а у вас выходит "Любой символ не относящийся к 2) 0 или 1 раз". /(['"]).*?\1|(:\w*)\W?/g |
|||
|
||||
| alezzz |
|
||||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 11 Всего: 14 |
а зачем вообще \W ? так не проще:
? после \w думаю нужен + , а то будет захватываеть двоеточия без слов. Это сообщение отредактировал(а) alezzz - 11.12.2011, 23:51 |
||||
|
|||||
| noize |
|
|||
![]() 5.18.2 ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 10.7.2010 Где: СПб Репутация: нет Всего: 3 |
(?<!['"]):\w+(?=\W)(?!['"])
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Регулярные выражения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |