Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 1
Регистрация: 02.11.2017
Сообщений: 90
1

Выделение одного символа, который входит в шаблон

18.09.2020, 22:32. Показов 2221. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Мне необходимо разбить входящую строку, в которой разделителем является запятая.
Проблема в том, что может прийти строка такого рода: "some\=\,,Other"
В теории, после разбиения строки должны выйти такие строки: "some\=\," и "Other".
Пробовал использовать такую регулярку: [^\\],\w

Но результатом является вхождение ",,O". Можно ли, условно говоря сообщить регулярке следующее: "Выдели мне запятую, слева от которой нет слэша, а справа стоит любая буква"?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2020, 22:32
Ответы с готовыми решениями:

Дано 2 символа. Верно ли, что код только одного символа кратен 3
помогите решить задачу: дано 2 символа. верно ли , что код только одного символа кратен 3 вот...

Даны три символа. Верно ли, что код ни одного символа не является большой русской буквой
даны три символа. верно ли, что код ни одного символа не является большой русской буквой

Выделение текста от символа до символа
Скрипт выводит массив array в табличный вид. Нужно чтобы в одной строке массива удалить всякий...

Выделение строки с заданного начального символа до заданного конечного символа
NewCopy – выделение строки с заданного начального символа до заданного конечного символа NewDelete...

8
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
18.09.2020, 22:43 2
Лучший ответ Сообщение было отмечено SquirrelLeonid как решение

Решение

SquirrelLeonid, так?
Код
(?<!\\),(?=\w)
1
Невнимательный
 Аватар для ft4l
2792 / 1123 / 349
Регистрация: 08.02.2013
Сообщений: 6,388
Записей в блоге: 2
18.09.2020, 23:04 3
Цитата Сообщение от Строитель Посмотреть сообщение
(?<!\\),(?=\w)
Не всегда может находить ))
Bash
1
2
3
4
5
6
7
8
9
10
$ cat <<\x | /c/t/usr/php74/php.exe
 
<?php
$txt = '\\,x\\\\,y';
echo preg_replace('/(?<!\x5c),(?=\w)/', '<b>$0</b>', $txt), "\n";
echo preg_replace('/\x5c.(*SKIP)(?!)|,/', '<b>$0</b>', $txt), "\n";
x
 
\,x\\,y
\,x\\<b>,</b>y
0
2 / 2 / 1
Регистрация: 02.11.2017
Сообщений: 90
18.09.2020, 23:17  [ТС] 4
Я написал в тему с php потому что на сайте regex101 все регулярки писал с опцией "PCRE (PHP)", поэтому синтаксис мне неизвестен. Я понял, что ваш код заменяет вхождения на строку "<b>,</b>", но дальше этого не пошло. Не могли бы вы объяснить поподробнее?
0
Невнимательный
 Аватар для ft4l
2792 / 1123 / 349
Регистрация: 08.02.2013
Сообщений: 6,388
Записей в блоге: 2
19.09.2020, 00:08 5
Цитата Сообщение от SquirrelLeonid Посмотреть сообщение
дальше этого не пошло.
Я просто о том что слэш может экранировать и слэш тоже ....
как-бы если это учитывать то нужно перебирать все экранированые символы

\x5c это то же что и \\
... в php выражения в '' и в "" строках, а там \\ интерпритируется как \ и надо писать \\\\ вместо \x5c
в других языках может быть не в таких строках

(*SKIP) это отбросить ранее совпавшее а (?!) не совпадать ни с чем
вместе они делают так что совпадения нет но курсор сдвигается и поиск начмнается с позиции после пройденного ранее

Заменять это для наглядности просто ))
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$txt = '\\,x\\\\,y';
var_export( preg_split('/(?<!\x5c),(?=\w)/', $txt));
var_export( preg_split('/\x5c.(*SKIP)(?!)|,/', $txt));
/* выведет
array (
  0 => '\\,x\\\\,y',
)array (
  0 => '\\,x\\\\',
  1 => 'y',
)
*/
но var_export() экранирует слеши чтобы вставить их в строки
0
2 / 2 / 1
Регистрация: 02.11.2017
Сообщений: 90
19.09.2020, 00:46  [ТС] 6
Но выражение "/\x5c.(*SKIP)(?!)|,/" не находит соответствия в этой строке:
"Name=P<B>,<\B>FieldName=NAME\,NEXT\;NEXT\, street\\=Ed\\\\<B>,<\B>Color=Green"
Где <B>,<\B> - ожидаемое совпадение.

Добавлено через 18 минут
На данный момент решение от пользователя "Строитель" наиболее близко. Но look behind (?<!(\\)) работает только на один символ, а задать произвольное количество символов я не могу в силу того, как работает look behind.
0
Невнимательный
 Аватар для ft4l
2792 / 1123 / 349
Регистрация: 08.02.2013
Сообщений: 6,388
Записей в блоге: 2
19.09.2020, 10:42 7
Цитата Сообщение от SquirrelLeonid Посмотреть сообщение
look behind (?<!(\\)) работает только на один символ
Не понятно какие нужны запятые из этого текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ cat <<\x | /c/t/usr/php74/php.exe
 
<?php
$txt = <<<'TXT'
Name=P,FieldName=NAME\,NEXT\;NEXT\, street\\=Ed\\\\,Color=Green
TXT;
print_r( preg_split('/(?<!\x5c),(?=\w)/', $txt));
print_r( preg_split('/\x5c.(*SKIP)(?!)|,/', $txt));
print_r( preg_split('/(?<=\bNEXT\x5c|[^\x5c]),\s*(?=\w)/', $txt));
print_r( preg_split('/\bNEXT\x5c\K,\s*|\x5c.(*SKIP)(?!)|,/', $txt));
 
x
 
Array
(
    [0] => Name=P
    [1] => FieldName=NAME\,NEXT\;NEXT\, street\\=Ed\\\\,Color=Green
)
Array
(
    [0] => Name=P
    [1] => FieldName=NAME\,NEXT\;NEXT\, street\\=Ed\\\\
    [2] => Color=Green
)
Array
(
    [0] => Name=P
    [1] => FieldName=NAME\,NEXT\;NEXT\
    [2] => street\\=Ed\\\\,Color=Green
)
Array
(
    [0] => Name=P
    [1] => FieldName=NAME\,NEXT\;NEXT\
    [2] => street\\=Ed\\\\
    [3] => Color=Green
)
0
2 / 2 / 1
Регистрация: 02.11.2017
Сообщений: 90
19.09.2020, 12:05  [ТС] 8
Второй вариант ищет нужные запятые, но на regex101 уже не работает.
Миниатюры
Выделение одного символа, который входит в шаблон  
0
Невнимательный
 Аватар для ft4l
2792 / 1123 / 349
Регистрация: 08.02.2013
Сообщений: 6,388
Записей в блоге: 2
19.09.2020, 12:58 9
Лучший ответ Сообщение было отмечено SquirrelLeonid как решение

Решение

Цитата Сообщение от SquirrelLeonid Посмотреть сообщение
на regex101 уже не работает
У меня как-будто работает.
Вставил по приведённой выше ссылке строку и второе выражение
Затем в строке с выражением щёлкнул флажок справа и выбрал g
... нашло две запятые ... первую и последнюю

Версии pcre возможно могут быть разные ... но ппроверял не php v5.4.0
pcre

PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 8.12 2011-01-15

и PHP 5.2.17
pcre

PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 8.02 2010-03-19

... работает
но в последнем жалуется на <<<'TXT'

Добавлено через 13 минут
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cat <<\x | /c/T/510sb-perl/perl/bin/perl
 
use 5.010;
$txt = <<\TXT
Name=P,FieldName=NAME\,NEXT\;NEXT\, street\\=Ed\\\\,Color=Green
TXT
;
say for split /\x5c.(*SKIP)(?!)|,/, $txt;
x
Name=P
FieldName=NAME\,NEXT\;NEXT\, street\\=Ed\\\\
Color=Green
 
zzz@zz MINGW32 ~
$ /c/T/510sb-perl/perl/bin/perl -v
 
This is perl, v5.10.1 (*) built for MSWin32-x86-multi-thread
....
0
19.09.2020, 12:58
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2020, 12:58
Помогаю со студенческими работами здесь

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

Шаблон Flash Template #31368 - что входит в его состав
Здравствуйте, возможно кто-то уже встречался с этим шаблоном Flash Template #31368!?

Как заменить Глиф (Glyph) одного символа на глиф другого символа для шрифтов типа otf
Нужно поменять местами глиф символа А и Б. Что бы когда вводился символ А выводился символ Б и...

Шаблон и выделение памяти
#include &lt;iostream&gt; template&lt;class T&gt; T CreateArray(T a, int n) { a = new T ; // ошибка:...

Входит только в одного пользователя.
Здравствуйте. У меня была проблема описанная здесь...

Не входит в первый if, который ищет минимальный элемент
Подскажите почему не входит в первый if, который ищет минимальный элемент ? #include &quot;pch.h&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru