|
Помогите по regex, пжлста. | ☑ | ||
---|---|---|---|---|
0
DES
28.05.13
✎
15:09
|
есть строка в которой содержатся теги {lang xx}{/lang}
Между тегами может быть расположен любой текст. xx - может быть любой 2-х буквенной строкой. Если xx совпадает с фильтром, то нужно вернуть строку состоящую из. символов не обрамленных любыми тегами + символы обрамленные тегами с совпадающими XX и фильтр пример: ИсходнаяСтрока="Это строка, она может быть на {lang ru}русском{/lang}{lang en}английском{/lang} языке и не на {lang ru}русском{/lang} {lang en}английском{/lang} языке." Если СтрФильтр="ru" Тогда "Это строка, она может быть на русском языке и не на русском языке." а Если СтрФильтр="en" Тогда "Это строка, она может быть на английском языке и не на английском языке." Эта конструкция PHP выполняет это $lang_code = "ru"; $regex = "#{lang ".$lang_code."}(.*?){\/lang}#is"; $text = preg_replace($regex,'$1', $text); $regex = "#{lang [^}]+}.*?{\/lang}#is"; $text = preg_replace($regex,'', $text); return $text; Вопрос. Бывает что в строке нет закрывающего тега {/lang}. как на PHP проверить его наличие и добавить если его нет. таких тегом в строке может быть несколько это правильно - яяяя{lang xx}яяяяя{/lang}яяя{lang xx}яяя{/lang}{lang xx}яяяя{/lang} тут добавить нужно - яяяя{lang xx}яяя{/lang}яяя{lang xx}яяя{/lang}яяя{lang xx}яяяяя |
|||
1
DES
28.05.13
✎
15:45
|
или кто знает сайт на котором можно потестить PHP код?
|
|||
2
drcrasher
28.05.13
✎
15:48
|
поставь локально апач с пхп и играйся
например, http://www.appservnetwork.com/ |
|||
3
kokamoonga
28.05.13
✎
16:43
|
||||
4
DES
28.05.13
✎
16:58
|
хорошо, ладно
Как на PHP заменить последнее совпадение найденное в строке? пример "вывыаыва2ываываыва2ыаыаываы2пвпва" как сделать "вывыаыва2ываываыва2ыаыаываы3пвпва" ? |
|||
5
kokamoonga
28.05.13
✎
19:25
|
(4) могу заблуждаться, но голыми regexp вроде никак.
а просто на php вот например http://ideone.com/TPECgZ |
|||
6
kokamoonga
28.05.13
✎
19:29
|
(0) (4) автор, а поделись секретом, зачем вообще все эти пляски?
|
|||
7
Ковычки
28.05.13
✎
19:38
|
на сколько маразм \x
|
|||
8
Ковычки
28.05.13
✎
19:38
|
да и вернется массив
|
|||
9
DES
28.05.13
✎
20:11
|
(6) нада
(5) спс |
|||
10
DES
29.05.13
✎
00:32
|
опа, оказалось не так просто.
нужно попарно отслеживать теги в строке внутри подстрок ограниченных двойными кавычками, а их может быть несколько, и если один тег не закрылся до конца подстроки ", то тогда его закрыть {/lang}" |
|||
11
kokamoonga
29.05.13
✎
00:57
|
(10) не переживай, этого никто не мог предвидеть.
ответь лучше на вопрос в (6) |
|||
12
DES
29.05.13
✎
10:24
|
(11) Jommla 2.5 + Kunena 3.0 + easylanguage
многоязычный сайт в любом месте теги {} lfd.n возможность выводить только текст определенного языка, в зависимости от переключателя. Но есть проблемс. easylanguage плагин обрабатывает всю страницу перед передачей. находит там {}{/} и выполняет то, что описано выше. НО!!! Kunena формирует тег title = "траляля..." из текста путем обрезания текста и добавлением "...". Поэтому закрывающий тег {/lang} может быть отрезан. А easylanguage не находя его курочит HTML и передает обломки. Я не знаю как отключить формирование тега title (я только месяц как про joomla услышал и это мой первый сайт на CMS, раньше писал в сайт в блокноте, и без PHP) Пока я нарыл как увеличить размер обрезки текста для title и это временно решило проблему, но при добавлении темы с большим текстом - проблемы вылезут опять. Поэтому нужно впендюривать закрываюший тег {/lang}, при его отсутствии, до обработчика easylanguage. |
|||
13
DES
29.05.13
✎
14:13
|
понятно объяснил ?
|
|||
14
kokamoonga
01.06.13
✎
00:49
|
(13) вполне. это жесть конечно.
еще какие-то теги там могут присутствовать? |
|||
15
DES
01.06.13
✎
01:28
|
Да, перехватил формирование title до easylanguage.
Теперь нормально. Правда теперь необъяснимый баг появился такого же типа. Не русском языке страница нормально формируется, а на альтернативном - косячит также, как если бы кусок кода страницы вырезался произвольным образом. |
|||
16
DES
01.06.13
✎
01:30
|
с чего бы начать вкуриваться в regex ?
|
|||
17
DES
01.06.13
✎
11:06
|
Мама, я все починил (с)
Но все умрет при обновлении Kunena. (14)Если есть желание разобраться с этим, то чинить нужно такое. div class="klatest-subject ks"> Последнее сообщение: <a href="/tighina/index.php?option=com_kunena&view=topic&catid=16&id=16&Itemid=196&lang=ro#16" rel="nofollow" title="View Last Post in Topic '{lang ru}Месторасположение{/lang}{lang en}Locate{/lang}'">{lang ru}Местораспол ...</a> </div> тут: {lang ru}Местораспол ...</a> закрывающий {/lang} обрезан, причем он может быть обрезан и так: {lang ru}Местораспол {...</a> и так {lang ru}Местораспол {/lang...</a> |
|||
18
DES
05.06.13
✎
10:06
|
Поможете?
Как на regex сделать. Нужно в тексте найти тег {lang xx} ********* {/lang} Если найден {lang xx}, но не найден {/lang} и после {lang xx} найдена подстрока '...' (кавычек нет) то нужно заменить '...' на '{/lang}...' |
|||
19
DES
05.06.13
✎
18:55
|
ладно, скажите тогда как
найти строку в которой есть '{lang ' '...', но между ними нет {/lang} |
|||
20
Jaap Vduul
05.06.13
✎
19:25
|
(19)
Тебе нужен negative look-ahead паттерн. Вот тут по-русски: http://www.php.net/manual/ru/regexp.reference.assertions.php |
|||
21
Fragster
гуру
05.06.13
✎
19:29
|
||||
22
DES
05.06.13
✎
19:49
|
да читать то я умею, я регекс складывать не умею
|
|||
23
DES
06.06.13
✎
12:40
|
+1
|
|||
24
badboychik
06.06.13
✎
12:45
|
в регекспах есть метасимвол "конец строки"
|
|||
25
DES
06.06.13
✎
12:54
|
Есть. Но мне не поможет , т.к. это HTML текст и там может быть ни одного "конца строки"
|
|||
26
DES
06.06.13
✎
12:57
|
Еще вопрос как найти подстроку состоящую из подстрок 'abcdegf' любой длины начиная с первого символа + пробел
т.е. 'a ' 'ab ' 'abc ' ... 'abcdegf ' |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |