Регулярные выражения. Замена не внутри тега.

Rynor

stay hungry
Регулярные выражения. Замена не внутри тега.

Уважаемые, подскажите с темой, плиз, что-то не выходит цветок.
Есть XSL шаблон текст из тегов и всяких-разных слов.
Мне необходимо заменить все русские слова или словосочетания (они берутся из БД и перебираются по циклу) на переменные.
Перевожу сайт из режима русский only в режим многоязычности.
Всё хорошо, но затык есть с такой ситуацией:
... <input type="submit" value="Вперёд"/>Вперёд <input type="hidden" name="action" value="login"/> Какие-то ещё слова....

Мне необходимо, чтобы заменилось только слово вне тега.

Пробовал, не помогает:
"~([^"/])(Вперёд)([^"]?)~i";
"~(>|\s)(Вперёд)([^"]?)~i";

Тут нет правила для тегов, составить самому сока мозга не хватает, помогите, пожалуйста!
Заранее благодарю.
 

Alexandre

PHPПенсионер
вариант 1) используй RegExp из eXSLT, если есть возможность, то используй встроенный RegExp в libxml
вариант 2) можно вообще не заморачиваться на RegExp
делается так, исх. даные, добавляем значение языка.
Код:
<root lan="ru">.....</root>
шаблон
Код:
<xsl:include href=...>
<xsl:template match=...>
<xsl:var name=lang select="/root/@lang">
....
   <input type="submit" >
         <xsl:if $lang="ru">
       <xsl:attribute name="value" >Вперед</xsl:attribute >
// или выбираем значение из импортируемого файла
   </xsl:if>

<xsl:if $lang="en">
....
</xsl:if> // если языков больше чем 2, то используем <xsl:choose>
 </input >
 

Rynor

stay hungry
Спасибо за ответ, вариант 2, конечно эффективнее, но, к сожалению, у меня задача быстро перекинуть несколько сайтов, текстов много, перекодить весь это бардак по-нормальному возможности нет, время ограничено :( Делается поверхностный хак "русский - многояз", а что там в тегах - никого пока не волнует и будет ли волновать - не уверен.

Я в принципе задачу выполняю, но с текущим регом имею единичные глюки, которые приходится править руками, хочу избавиться от них, ибо автоматизация рутины рулит :)

По поводу варианта 1 попробую, хотя знаний нет, надо четатьььь.
 

denver

?>Скриптер
Rynor
нужны все символы после > и до первого < за исключением самого "<":
>([^<]*?)<

Alexandre
Это уже череcчур. Я понимаю еще если в шаблоне только англ. а все остальные вынесены в localizaions.xml, но то что у вас это не удобно ни верстальщику (нужно дофига choose, when, otherwise...) ни переводчику (исправлять xsl фалйлы?).
 

Rynor

stay hungry
Да, с регами я идиот, это же элементарно, счас проверю, спасибо!!! :)

согласен, кстати, по поводу чересчур
у меня перевод осуществляется вне xsl, есть отдельный gettext-like класс

а в xls имеем вставку вместо
слов что-то типа
<xsl:value-of select="/page/nls/var"/>
 
Сверху