| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > regexp замена текста в файле |
| Автор: firedrago 3.6.2006, 11:11 | ||||
| Всем привет, вот срожаюсь и не могу победить.....не силен я в regexpах..... есть файл с содержанием типа-
и мне надо заменять там например VAR= на #VAR=, #VAR3=.... на VAR3=123, # VAR5=... на VAR5="abrakadabra". я пробовал сделать это как-то так
так работает, но- 1. ему все равно где начинается стринг ##VAR= -он тоже находит, а коментарии он должен игнорировать 2. если б это было VAR4 то он взял бы всю строчку вместе с коментарием - тоже не желательно 3. что делать с параметром типа VAR5 я вообще не знаю, его значение на нескольких строках, а как это все заменить даже нет идеи помогите pls............. зарание благодарен! |
| Автор: Mal Hack 3.6.2006, 14:01 |
| Можно еще раз по русски описать что на что заменять, а что не надо. |
| Автор: firedrago 3.6.2006, 14:34 |
| еще раз по русски - 1. замена не активированого (#VAR4=444) параметра ----------------------- ## # - не активный ## - коментарий VAR=111 VAR2A=222 #VAR3=333 ##VAR4= bla bla #VAR4=444 # var4 bla bla bla # VAR5="zzzzz zzzzzzzzzzzzz" ----------------------- на активный с новым значением (896) ----------------------- ## # - не активный ## - коментарий VAR=111 VAR2A=222 #VAR3=333 ##VAR4= bla bla VAR4=896 # var4 bla bla bla # VAR5="zzzzz zzzzzzzzzzzzz" ----------------------- при этом (##VAR4= bla bla) и (# var4 bla bla bla) должны оставаться не измененными т.к. это коментарий(##VAR4= bla bla) и (# var4 bla bla bla) 2.замена значения (VAR5) cо значением в кавычках текст может быть на нескольких строках ----------------------- ## # - не активный ## - коментарий VAR=111 VAR2A=222 #VAR3=333 ##VAR4= bla bla #VAR4=444 # var4 bla bla bla # VAR5="zzzzz zzzzzzzzzzzzz" ----------------------- например на ----------------------- ## # - не активный ## - коментарий VAR=111 VAR2A=222 #VAR3=333 ##VAR4= bla bla #VAR4=444 # var4 bla bla bla # VAR5="bbbb bbbbbbb bbbb bbbb" ----------------------- это основное..... а дальше я сам поробую....... |
| Автор: Mal Hack 4.6.2006, 00:03 | ||
|
| Автор: firedrago 4.6.2006, 14:51 |
| @Mal Hack - спасибо за примеры, но это немного не то, что мне надо (видать у меня с русским проблемы итак имеем часть файла --------------------------------------------- ##HTTPS Variables HTTPSDIR="/stat/var/www" # Define the location to serve HTTPS from HTTPSCGI="yes" # Whether to enable CGI in the above path #OVPN_VERBOSITY=1 #OVPN_PUSH1="route 192.168.0.0 255.255.255.0" ##/etc/issue.net is used by SSHD, more to come NETISSUE="WARNING!!! This system is solely for the use....." --------------------------------------------- теперь как я это вижу 1. начало строки /^\s* 2. возможное наличие коментария # [#]{0,1} 3. название переменной напр. HTTPSDIR=, OVPN_VERBOSITY=, NETISSUE= на данном этапе имеем /^\\s*[#]{0,1}ПЕРЕМЕННАЯ= --------------------------------------------- ##HTTPS Variables HTTPSDIR="/stat/var/www" # Define the location to serve HTTPS from HTTPSCGI="yes" # Whether to enable CGI in the above path #OVPN_VERBOSITY=1 #OVPN_PUSH1="route 192.168.0.0 255.255.255.0" ##/etc/issue.net is used by SSHD, more to come NETISSUE="WARNING!!! This system is solely for the use....." --------------------------------------------- тут вроде все ок, но вот теперь пункты которые я не знаю как реализовать...... 4. значение переменной может быть в кавычках " или без 5. после значения (не зависимо от того в кавычках или нет) может быть коментарий типа HTTPSCGI="yes" # Whether to enable CGI in the above path #OVPN_VERBOSITY=1 # bla bla 6. значение в кавычках может содержать пробелы, буквы,цифры, слэши и т.д. HTTPSDIR="/stat/var/www" # Define the l #OVPN_PUSH1="route 192.168.0.0 255.255.255.0" 7. значение в кавычках может мыть на нескольких строках NETISSUE="WARNING!!! This system is solely for the use....." вот вроде и все... |
| Автор: Mal Hack 4.6.2006, 15:01 |
Ты объясни чего ты хочешь, блин, а не как ты это видешь. Что и куда. |
| Автор: firedrago 4.6.2006, 15:09 |
| у меня есть html форма для этого конфига и если я изменяю значения в форме то она должна находить правильную переменную в файле и заменять ее на новую напр. HTTPSCGI="yes" # Whether to enable CGI in the above path >>> HTTPSCGI="no" # Whether to enable CGI in the above path если переменная была деактивирована напр. #OVPN_VERBOSITY=1 и ее активирую то должна заменяться на OVPN_VERBOSITY=1 естественно коментари должны оставаться на своих местах |
| Автор: firedrago 4.6.2006, 20:32 |
| $regexp='/(^\\s*[#]{0,1}'.$item.'=("[^"]*.|[^\\n\\\\W ]*.|\\n))/m'; $item - имя переменной |
| Автор: Mal Hack 5.6.2006, 01:02 | ||
firedrago, мне вот интересно, как это работает, если у тебя вначале строки должен символ "\" стояить, а потом буква s ноль и более раз...
|
| Автор: firedrago 5.6.2006, 02:17 |
| ой, если б я знал.....как-то работает........ посмотри на картинки может понятно будет, да мне объясниш....... ![]() ![]() |
| Автор: Mal Hack 5.6.2006, 11:26 |
| Мне картинка ничего не говорит, я скрипты запускаю и по ним работу смотрю. |
| Автор: firedrago 6.6.2006, 22:58 | ||
| ...да ты действительно прав! это там лишнее.... вот мой последний вариант (^[#]{0,1}VAR=("[^"]*.|[^\n\W ]*.|$)) 1. позиция в начале строки после символа конец строки (^[#]{0,1}VAR=("[^"]*.|[^\n\W ]*.|$)) 2. символ # может встретиться 0 или 1 раз (^[#]{0,1}VAR=("[^"]*.|[^\n\W ]*.|$)) 3. название моей переменной (^[#]{0,1}VAR=("[^"]*.|[^\n\W ]*.|$)) 4. если символ " (^[#]{0,1}VAR=("[^"]*.|[^\n\W ]*.|$)) 4.a. любой символ только не " повторяющийся сколько угодно раз (^[#]{0,1}VAR=("[^"]*.|[^\n\W ]*.|$)) 4.b. любой символ только не новой строки (в нашем случае закрытие кавычки) (^[#]{0,1}VAR=("[^"]*.|[^\n\W ]*.|$)) (4-4.b. находит строки типа VAR="1234" #VAR="12 34" все что после закрытых ковычек - игнорируется ) 5. или любой символ много раз только не (конец новая строка, не буквы, пробел) (^[#]{0,1}VAR=("[^"]*.|[^\n\W ]*.|$)) (находит строки VAR=123 # bla bla #VAR=21321321 ) 6. иначе если конец строки (^[#]{0,1}VAR=("[^"]*.|[^\n\W ]*.|$)) ( находит строки VAR= ) правильно ?
|
| Автор: Mal Hack 7.6.2006, 23:43 |
сложно сказать. Я свой вариант написал, вроде бы он работает. Если честно, я несколько не догнао условие поставленной задачи |