Как мне добавить пробел после косой черты, если пробел не содержится за косой чертой?
Это способ найти формат регулярных выражений что-то подобное?
У меня может быть строка или список строк вроде
Human have hands/fingers/feet and so on
Если за косой чертой нет места, я хочу добавить за косой чертой Human have hands/ fingers/ feet and so on
Но, если пробел содержится за строкой, я не хочу добавлять лишний пробел. Только хочу добавить пробел в оставшейся части строки без пробела после косой черты.
например hands/fingers/ feet
в hands/ fingers/ feet
5 ответов
Вы можете сделать это с помощью этого регулярного выражения:
\/(\s)?
Демо: https://regex101.com/r/c67Mh9/1/
Пример PHP:
echo preg_replace('@\/(\s)?@', '/ ', "Human have hands/fingers/ feet and so on");
Ниже код может работать (проверено в автономном режиме):
<?php
$string = "hands/fingers/feet";
$spaceArr = explode("/",$string);
$modify_string = '';
foreach($spaceArr as $val){
$modify_string .= $val."/ ";
}
echo $modify_string;
// Output is hands/ fingers/ feet
?>
Вы можете добавить много места в руках / пальцах / ногах, но вывод всегда будет похож на руки / пальцы / ноги
Да, использование негативного взгляда вперед - лучший способ.
$str = preg_replace('/\/(?!\s)/', '/ ', $str);
Вы можете увидеть это [здесь][1]
Это использует негативный взгляд в будущее. Так что это в основном говорит:
Подходим /
только если за ним не стоит пробел. Кроме того, прогнозирование не требует использования каких-либо символов в сопоставлении, поэтому нет необходимости заменять букву при сопоставлении без предварительного просмотра.
Особая благодарность @ShalithaSuranga за публикацию того же ответа, который я изначально придумал, но до этого у меня была возможность опубликовать его, что заставило меня приложить дополнительные усилия, чтобы заглянуть в будущее.
Я обычно не использую их, поскольку они могут быть намного более запутанными, чем обычные шаблоны сопоставления.
Тем не менее, либо один, вероятно, будет быстрее, чем взорваться, или другие более длинные методы. Тем не менее, в этом случае скорость может не быть проблемой, я бы сказал, что вы выбираете тот, который наиболее полезен для вас, и который легче для вас, чтобы прочитать и понять последний.
Читаемость всегда № 1, затем функциональность, а затем производительность.
Если вам нужен короткий не-regx ответ, вы можете использовать это тоже
$str = "hands/fingers/feet";
echo implode("/ ", array_map('trim', explode("/", $str)));
Как видно здесь
Для этого array_map
принимает в качестве первого аргумента функцию обратного вызова (которая может быть строкой) и применяет ее или сопоставляет ее с каждым элементом в массиве. В этом случае мы хотим trim
который удаляет пробелы с обеих сторон строки. Затем мы снова взрываемся. Таким образом, массив, как это от взрыва one/ two
[
'one',
' two'
]
будет обрезать пробелы, затем мы взрываем его с '/ '
и все готово.
Да, конечно, с RegEx для этого
$count = null;
$returnValue = preg_replace('/\\/([^ ])/', '/ $1', 'hands/fingers/ feet', -1, $count);
объяснение
/\/([^ ])/
это регулярное выражение соответствует /
без пробела и замените на '/ $1'. Здесь $ 1 - символ после /
Смотрите больше: https://en.functions-online.com/preg_replace.html?command= average"pattern":"/\/([^ ])/","replace ":"/ $1","subject":"руки / пальцы / ноги", "предел":-1}
Использование explode()
ИЛИ попробуйте str_replace()
пример ниже
Пожалуйста, попробуй str_replace()
:
<php
$words = 'hands/fingers/ feet'; /** Your example words **/
$words = str_replace('/', '/ ', $words); /** Replace any slash with a slash AND a space **/
$words = str_replace('/ ', '/ ', $words); /** Replace slash with 2 spaces with slash with 1 space as this is what you need **/
echo $words; /** Output: hands/ fingers/ feet **/
?>
Я надеюсь, что это приведет вас в правильном направлении..