powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl regexp - как не трогать то что в скобках?
8 сообщений из 8, страница 1 из 1
Perl regexp - как не трогать то что в скобках?
    #39546765
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть строка вида:

Русские English ЕщеРусские AnotherEnglish

Последовательность латинских букв нужно окружить тегами с классом. Делаю просто:

Код: php
1.
$s =~ s/([a-z]+)/<span class='eng'>$1<\/span>/gi;



Но теперь оказалось, что в строке может быть еще и транскрипция:

Русские English ['ɪŋglɪʃ]

В квадратных скобках среди спецсимволов транскрипции тоже встречаются латинские буквы, но их трогать не нужно.

Как объяснить регекспу [a-z]+, чтобы он не трогал букв в квадратных скобках?

Если существенно - все это perl 5.22, используется use utf8;
...
Рейтинг: 0 / 0
Perl regexp - как не трогать то что в скобках?
    #39546842
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(не проверял) Попробуйте добавить внутри (или извне?) скобок \b - граница слова.
...
Рейтинг: 0 / 0
Perl regexp - как не трогать то что в скобках?
    #39547211
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
use utf8;
use open ':locale'; 

# назовём последовательностью англ. символов англ.букву и далее последовательность любых символов кроме кириллических
my $rx_eng = qr / \p{Latin} [^\p{Cyrillic}]+ /x;

while( <> ) {
    s ~ ($rx_eng) ~<span class='eng'>$1</span>~mgsix;
    print;
}
...
Рейтинг: 0 / 0
Perl regexp - как не трогать то что в скобках?
    #39547386
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
volodin661
Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
use utf8;
use open ':locale'; 

# назовём последовательностью англ. символов англ.букву и далее последовательность любых символов кроме кириллических
my $rx_eng = qr / \p{Latin} [^\p{Cyrillic}]+ /x;

while( <> ) {
    s ~ ($rx_eng) ~<span class='eng'>$1</span>~mgsix;
    print;
}



Не получается.

Код: php
1.
my $s = 'Русские English [&#618;&#331;gl&#618;&#643;]';



Обрамляет все вместе с транскрипцией:

Код: html
1.
Русские <span class='eng'>English [&#618;&#331;gl&#618;&#643;]</span>




А мне надо окружить только English, а транскрипцию в квадратных скобках оставить в покое.
...
Рейтинг: 0 / 0
Perl regexp - как не трогать то что в скобках?
    #39547407
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherНе получается.
Обрамляет все вместе с транскрипцией:
А мне надо окружить только English, а транскрипцию в квадратных скобках оставить в покое.

да понял я, разумеется, что именно надо обрамлять,
а не получается из-за PerlIO layer;
у меня-то locale на UTF-8 настроена, а у тебя, стало быть, нет.

Для проверки запусти так
Код: php
1.
perl -C255 thisscript.pl 


и убедишься
...
Рейтинг: 0 / 0
Perl regexp - как не трогать то что в скобках?
    #39547409
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу, сорри, не прочитал до конца.
...
Рейтинг: 0 / 0
Perl regexp - как не трогать то что в скобках?
    #39547478
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотрится так себе, но должно работать:
Код: perl
1.
s ~ (\[ [^\]]+ \]) | ([a-z]+) ~ $2 ? "<span class='eng'>$2</span>" : $1 ~mgsixe
...
Рейтинг: 0 / 0
Perl regexp - как не трогать то что в скобках?
    #39547593
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но если уверен, что внутри транскрипции пробелов нет,
тогда можно так, как предложил vkle

Код: perl
1.
s {\b ([a-z]+) \b} {<span class='eng'>$1</span>}mgsix
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl regexp - как не трогать то что в скобках?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]