RGameShow
@RGameShow
В поисках ответов на глупые вопросы

Как регулярным выражением удалить все пробелы и определенные символы в конкретных местах?

Нужно строку [contact-form-7 id="6274" title="Какой то текст с пробелами"] привести к виду:
[
    0 => 'contact-form-7',
    1 => 'id="6274"',
    2 => 'title="Какой то текст с пробелами"',
]


Мои попытки не увенчаются успехом...
$str = '[contact-form-7 id="6274" title="Какой то текст с пробелами"]';
$shortcode = preg_split ("/\b(\s|\")/", $str);


На выходе получаю следующее:
[
    0 => "[contact-form-7"
    1 => "id="6274"
    2 => " title="Какой то текст с пробелами"
    3 => "]"
]
  • Вопрос задан
  • 94 просмотра
Решения вопроса 3
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Вариант с preg_match:
<?php
$str = '[contact-form-7 id="6274" title="Какой то текст с пробелами"]';
preg_match("/\[(\S+) (\S+) (.+)\]/im", $str, $matches);

var_export($matches);


share PHP code
Ответ написан
0xD34F
@0xD34F Куратор тега Регулярные выражения
preg_match_all('~[\w\-]+(=".*?")?~', $str, $matches);
Ответ написан
Комментировать
@lolzqq
HTML,CSS,JS,PHP
Помощник с регулярками тут https://regex101.com
<?php
$str = '[contact-form-7 id="6274" title="Какой то текст с пробелами"]';
$str = preg_match_all("/([a-z]*-[a-z]*-[0-9])|([a-z]*=\"[0-9(\W)]*\")/",$str,$matches,PREG_PATTERN_ORDER);

print_r($matches[0]);
// Array ( [0] => contact-form-7 [1] => id="6274" [2] => title="Какой то текст с пробелами" ) 

 // если на выходе нужны одинарные кавычки, вместо двойных
for($i=0;$i<=count($matches[0])-1;$i++){
	$matches[0][$i] = str_replace('"','\'',$matches[0][$i]);
}

print_r($matches[0]);
// Array ( [0] => contact-form-7 [1] => id='6274' [2] => title='Какой то текст с пробелами' ) 
?>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы