![]() |
StringRegExpReplace — для чайников!
Не мог бы ктонибудь простые понятные примеры показать.
Код:
$s = StringRegExpReplace("ab12", "[:alpha:]","f") Почему это альфа вдруг буквы не показывает? А паттерн {x} сам себя размножает. И как создать тест с переносом строк внутри кода, array() чтоли? Для удобства хочется всё в одном скрипте собрать,хотя можно и внешний тест шаблон подключить в крайнем случае. То что в хелпе написанно, ну не понятно совершенно к сожалению. Особенно примеры утомляют напичканные While, If, Then, тут итак мозги свернёшь, нужны примитивные примеры, а не сложные. |
Вы скажите, чего хотите добиться своим кодом. Пока вижу, что паттерн не подходит совершенно.
А строки с переносом спецсимволом \n кодируются, либо да, в массив. |
|
Тут написано
Цитата:
Цитата:
Цитата:
Вообще меня интересует поиск и замена строк, но хотя StringRegExpReplace это только и делает. Redisych, загляните в этот пост, я хоть тему закрыл, но не решённым осталось http://forum.oszone.net/post-1545134-29.html там суть в том что надо найти одну строку, а изменить другую. Либо весь текст выстроить в строку и править в StringRegExpReplace Конкретно целевую строчку нельзя задавать в поиске, потомучто в файле таких строк много, а уникальное имя получается что в строке выше. Что-то мы отвлеклись... Давайте лучше примеры, хоть чтонибудь попроще? Или ссылку на примеры... Ато я так никогда не научусь паттерновому мышлению. $s = StringRegExpReplace("ab12", "[a-z]","1") А так действительно работает! Зачем же тогда нужно [:alpha:], ну уже хоть что-то получилось! =) |
У себя нашёл обратную функцию
Код:
;Содержимое массива Длинная Строка в одну строку |
А как можно файл построково читать, чтобы сравнивать строки с шаблоном?
Понятное дело надо найти @CRLF, только как ? Я думаю можно организовать как цикл через If <проверка строки с образцом> then <идти дальше или заменить> что-то типо того. |
Код:
If $strokVBloke > 1 Then; если строк больше одной Код:
;ПРИБАВЛЯЕМ ПО ОДНОЙ СТРОКЕ, ЗАПИСЫВАЯ В МАССИВ, ПОКА НЕ НАЙДЁМ КОНЕЦ |
Цитата:
Код:
$sData = 'Some text' & @CRLF & 'The End' |
а что значит заменить на '\1'
--- "Match any "word" character: a-z, A-Z, 0-9 or underscore (_)." Проверка букв из слов :lamer: Что-то у них слишком много паттернов того что очевидно, но только наоборот сбивающих с толку. Повторов тоже что-то много. "Repeat the previous character, set or group 0 or more times." а это буквально значит ноль или более раз =) Причём ещё и эквивалентно другому паттерну ;- ато нам одного этого не хватит ))) Интересно было бы русскую справку почитать, пойду поищу. Моя идея с поиском конца строки, тоже не клеится, так как мне никто не будет возвращать ни строку перед @CRLF ни её длину. Функции какие-то ограниченные. Подходящего ничего не вижу. Впрочем, FileReadLine меня заинтересовала, надо потестировать это... Ух! Она читает по строкам! Спасибо, Redisych за подсказку! |
А как можно StringRegExp() часть строки протестировать? Сравнить с шаблоном.
[пробелы в начале] [нужная часть строки] [не нужная часть строки] Пробелы вначале можно убрать так (?m) или точкой . Далее не знаю... Строка содержит < скобки > слеш / "двойные кавычки" равно = и буквы... ASCII вобщем, поправте если ошибаюсь? |
|
Код:
If StringRegExp($line, "\s*<obj class=""UPoint"" name=""Size""*") = 1 Then Exit К следующему StringRegExp( только с другим патерном) |
Код:
If StringRegExp($line, "\s*<obj class=""UPoint"" name=""Size""*") =0 Then Exit ; |
Я об этом подумал, но тогда чекнув первую строку и не найдя в ней соответствия будет выход.
Тут скорее что-то с @error нужно, только там возврат функции я не очень понял, и многообразие флагов. --->8-- Снова моя идея провалилась! Я мыслил так, что надо проверять (StringRegExp) соответствие строк пошагово. И найдя нужную строку следующим шагом найти другую строку, и если надо и третью. И тут вдруг понял, что мне это ничего не даст, так как перебор итак идёт от начала и последовательно. Причём нахождение первого экземпляра само по себе тоже ничего не значит. Вот если бы курсор установить в эту позицию и продолжить. Но опять же всё итак по порядку читается. А главное, что мне опять же понадобиться StringRegExpReplace после StringRegExp. Но затея вся была лишь из-за того, чтобы "грамотно" логично настроить поиск. Но всёравно суть лишь в том, что надо найти ключевые слова из нескольких строк, выстроить их в паттерн и применить StringRegExpReplace к блоку. Поэтому всё уже итак зделано. Надо лишь условие уточнить. Видимо из-за неверно установленных уникальных слов замена не корректно происходит. Обычно при наличии похожих блоков почему-то редактируется всегда самый нижний во всём XML. И ещё плохо что он один редактируется, было бы уж лучше тогда чтобы все зацепило функцией подходящие под образец, раз уж они похожи. |
Цитата:
|
Время: 11:29. |
Время: 11:29.
© OSzone.net 2001-