Регулярное выражение и (бэкслэш кавычка)

Статус
В этой теме нельзя размещать новые ответы.

gals

Новичок
Добрый день.

Есть затруднение в написании регулярки которая будет искать кавычку, но чтобы пропускала \"
то есть подряд идущие бэкслэш и кавычку.

Регулярка должна давать такие результаты:

1) Текст: aaaaaa\"bbbbbb"cccccc
Результат: aaaaaa\"bbbbbb
2) Текст: \"bbbbbb"cccccc
Результат: \"bbbbbb
3) Текст: \""cccccc
Результат: \"
4) Текст: aaaaaa"cccccc
Результат: aaaaaa
5) Текст: "cccccc
Результат:
6) Текст: \"\"\""cccccc
Результат: \"\"\"

Это контрольные примеры.
Я написал такую:
"/^(.*?[^\\\\]?)\"(.*)$/"
Но она работает только с примерами 3 и 5

Помогите, пожалуйста - уже все мозги сломал.
 

ad-quate

Новичок
gals, решение оказалось проще, чем в твоей регулярке: "/(aaaaaa)?(\\\\\")*(bbbbbb)?/"

PHP:
$input = $result = array();
// 1.
$input[] = <<<EOL
aaaaaa\"bbbbbb"cccccc 
EOL;

$result[] = <<<EOL
aaaaaa\"bbbbbb
EOL;
// 2.
$input[] = <<<EOL
\"bbbbbb"cccccc 
EOL;

$result[] = <<<EOL
\"bbbbbb
EOL;

// 3.
$input[] = <<<EOL
\""cccccc
EOL;

$result[] = <<<EOL
\"
EOL;

// 4.
$input[] = <<<EOL
aaaaaa"cccccc
EOL;

$result[] = <<<EOL
aaaaaa
EOL;

// 5.
$input[] = <<<EOL
"cccccc
EOL;

$result[] = '';

// 6.
$input[] = <<<EOL
\"\"\""cccccc
EOL;

$result[] = <<<EOL
\"\"\"
EOL;

$pattern = "/(aaaaaa)?(\\\\\")*(bbbbbb)?/";

foreach ($input as $key => $value){

	preg_match($pattern, $value, $match);
	
	echo $key + 1 . '. ';
	print_r($match[0]);
	echo ';' . PHP_EOL;

}
 

AmdY

Пью пиво
Команда форума
Чувствую себя единственным идиотом, который сходил и посмотрел ответы по ссылке. :(
 

ksnk

прохожий
AmdY
В "ответах" регулярка для Javascript, со слешами в регулярках у php свои тараканы. Да и задача несколько другая у топикстартера, насколько я понял...
 

Вурдалак

Продвинутый новичок
В "ответах" регулярка для Javascript, со слешами в регулярках у php свои тараканы.
Нет никаких отличий от PHP, нужно просто правильно составить строковой литерал, сама регулярка идентична.
 

Вурдалак

Продвинутый новичок
Вообще-то ЧЕТЫРЕ слеша в регулярке - это не "правильно составить строковый литерал", а "тараканы в php".
*Извиняюсь за резкость* Регулярки одинаковые. Четыре получается, потому что оба (PCRE, PHP) используют экранирование бекслешем.

Хотя PHP неплохо бы иметь альтернативные способы создания литералов типа как в C#.
 
Последнее редактирование:

С.

Продвинутый новичок

AmdY

Пью пиво
Команда форума
Тема закрыта.

Проблемы личного характера и бессмысленные споры между участниками не являются предметом обсуждения форума.
Обсуждайте их в привате.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху