Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] StringRegExpReplace непонятен синтаксис

Ответить
Настройки темы
[решено] StringRegExpReplace непонятен синтаксис

Пользователь


Сообщения: 73
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: AlexM
Дата: 24-01-2011
Наткнулся на полезную функцию в http://autoit-script.ru/index.php?topic=2805.0. Читал help смотрел примеры, так и не понял,

1) $sLocation = StringRegExpReplace($sResponse, "(?s).*Location: (.*?)[\r\n].*", "\1")
Зачем .* - ведь вроде перед Location: нет 2х одинаковых подряд символов.

2) как мне из

<script type="text/javascript" language="JavaScript">
window.location.replace("/files/75350.pdf");
</script>

выделять

files/75350.pdf

Помогите пожалуйста разобраться с функцией. Спасибо!

По 2 получилось StringRegExpReplace($ReDirect1, "(?s).*window.location.replace[(][""]/(.*?)["");\r\n].*", "\1")

Однако хотелось бы на будущее понимать функцию, поэтому вопрос 1 остался, хотя я сейчас понимаю .* как набор любых символов. Тогда зачем (?s) в начале?

3) Почему замена [(][""] на [(""] приводит к сбою результата?

4) почему 3й параметр "\1" хотя в help это flag и он - число?

Спасибо!

Отправлено: 08:00, 24-01-2011

 

Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


AlexM, вот ещё вариант попробуй
(?si)(?:.*window.location.replace\("\/)(.*?)(?:"\);\r\n.*)

Для справки посмотри утилиту RegExp. Там есть справка в виде HTML и справка в виде Library_Example.ini, который нужно открыть утилитой и пробовать работу регулярок в действии.

4. "\1" - это не может быть флагом, так как третий параметр "replace" - элемент замены. Комбинация "\1" - замена на первую группу. Группы определяются скобками. Кроме закомментированных скобок /(

1. .* - в чём поиск? Где то есть, а где то нет. Комбинация предполагает даже отсутствие символов.

2. (?s) - в справке: чтобы комбинация .* включала переносы строк. Иначе для многострочного текста работать не будет.

3. [(][""] - это вообще не понятно... [(] - квадратные скобки определяют набор символов, а один символ не понятно зачем туда совать/толкать. [""] - одинаковые символы тоже бессмысленно толкать. Набор символов внутри квадратных скобок подрозумевает один символ из возможного набора символов, а если набор из двух одинаковых или одного символа, то идея теряется, его можно не заключать в квадратные скобки.

Ну кроме этого хочется добавить, что регулярное выражение должно не только найти правильный результат, но и исключить ложное срабатывание... К примеру такая регулярка
(?s)(?:.*\("\/)(.*?)(?:".*)
тоже будет работать, но стоит чуть изменить текст поиска и либо произойдёт захват ненужного, либо игнорирование нужного.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:56, 24-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


AlexM,
Предупреждение за нарушение правил форума, пункт 2.7 и пункт 3.19:

Цитата:
2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...
Подробнее о принципах создания тем читайте в этом документе и Правилах форумов.

3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный и напишите об этом в теме.
Переименуйте пожалуйста тему (Как переименовать свою тему?).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 15:04, 24-01-2011 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] StringRegExpReplace непонятен синтаксис

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
StringRegExpReplace — для чайников! semiono AutoIt 14 21-11-2010 01:51
[решено] Расширенная замена StringRegExpReplace ALFERIUS AutoIt 5 03-09-2009 11:11
[решено] Не могу разобраться с FileOpen и StringRegExpReplace ALFERIUS AutoIt 6 26-08-2009 14:10
[решено] И снова stringRegExpReplace... Twix1124 AutoIt 6 01-06-2009 03:49
[решено] Хелп с StringRegExpReplace xSpaiderx AutoIt 8 31-03-2009 23:16




 
Переход