Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] StringRegExpReplace непонятен синтаксис (http://forum.oszone.net/showthread.php?t=197464)

AlexM 24-01-2011 08:00 1595895

StringRegExpReplace непонятен синтаксис
 
Наткнулся на полезную функцию в 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 и он - число?

Спасибо!

AZJIO 24-01-2011 09:56 1595942

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

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

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

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

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

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

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

Creat0R 24-01-2011 15:04 1596163

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

Цитата:

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

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


Время: 17:32.

Время: 17:32.
© OSzone.net 2001-