Как объединить Regex с удалением пробела и символа # - PullRequest
2 голосов
/ 03 марта 2020

У меня есть этот массив, который мне нужен для удаления пробелов и символа # хештега:

array (size=7)
  0 => string 'darwin' (length=6)
  1 => string ' #nature' (length=8)
  2 => string ' explore' (length=8)
  3 => string ' galapagos' (length=10)
  4 => string 'karma' (length=5)

  foreach ($feedSinglePosts["hashtags_list"] as $key=>&$item) {
     $item = preg_replace('/(\s|^)/', '', $item);
     $item = preg_replace('/\#+/', '', $item);
  }

Приведенное выше регулярное выражение работает хорошо, но Я хочу сделать его одной строкой, если это возможно, Когда я делаю: /(\s|^)\#+/ это выводит это:

array (size=7)
  0 => string 'darwin' (length=6)
  1 => string 'nature' (length=6)
  2 => string ' explore' (length=8)
  3 => string ' galapagos' (length=10)
  4 => string 'karma' (length=5)

Как сделать регулярное выражение для лайнера, который удаляет пробелы и 3 хэштега.

Ответы [ 3 ]

1 голос
/ 03 марта 2020

Похоже, что символы будут в начале или в конце. Если это так, то нет необходимости в циклах или регулярных выражениях:

array_walk($feedSinglePosts["hashtags_list"], function(&$v) { $v = trim($v, "\n\r #"); });

Если вам нужно удалить их где-либо:

$feedSinglePosts["hashtags_list"] = str_replace(["\n","\r"," ","#"], "", $feedSinglePosts["hashtags_list"]);
1 голос
/ 03 марта 2020

Путь без регулярных выражений с array_walk() и trim(),

<?php
    $array = ['darwin' ,' #nature',' explore', ' galapagos','karma'];
    function remove_hash_space(&$value,$key){
         $value = trim($value,'# ');
     }
    array_walk($array, 'remove_hash_space');  
    print_r($array);
   ?>

DEMO: https://3v4l.org/nOadH

ИЛИ с одной строкой array_map(),

 $array = array_map(function($e){return trim($e,'# ');},$array);  

ДЕМО: https://3v4l.org/OaS1F

0 голосов
/ 03 марта 2020

Вы можете использовать

$arr = ['darwin',' #nature',' explore',' galapagos','karma'];
print_r( preg_replace('~^[\s#]+~', '', $arr) );
// => Array ( [0] => darwin [1] => nature [2] => explore [3] => galapagos [4] => karma )

См. Демо regex

Шаблон ^[\s#]+ соответствует 1 или более вхождениям (+) пробела или # символов ([\s#]) в начале строки (^).

Если в ваших строках может содержаться какой-то странный пробел Unicode, рассмотрите возможность добавления модификатора u: ~^[\s#]+~u.

Если вам нужно обрабатывать только горизонтальные пробелы, замените \s на \h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...