лучший способ создать/разделить строку к тегам

Если я вас правильно понял, у вас есть несколько docker-compose.yml файлов, и вам нужны сервисы для их взаимодействия друг с другом. Логическое предложение состоит в том, чтобы иметь глобально определенную сеть, скажем,

docker network create testapis

и иметь все службы, связанные с ней:

docker-compose.yml [118 ]

...
networks:
  default:
    external: 
      name: testapis

В этом случае все сервисы из всех файлов docker-compose будут видеть друг друга под своими именами хостов (api1, api2 и т. Д.), И не потребуется показывать порты (если вы не хотите использовать сервисы). извне этой сети)

5
задан philant 11 February 2009 в 12:38
поделиться

8 ответов

Используйте взрывание () функция и отдельный или пробелами или запятыми. Пример:

$string = 'tag1 tag-2 tag#3';
$tags = explode(' ', $string); //Tags will be an array
23
ответ дан 18 December 2019 в 05:20
поделиться

Разделенный пробелом \s+ вместо этого.

9
ответ дан 18 December 2019 в 05:20
поделиться

Разделение на \s + (пробел) вместо \W + (неалфавитно-цифровой).

3
ответ дан 18 December 2019 в 05:20
поделиться

Я предполагаю, что Вы могли сначала попытаться очистить строку прежде, чем разделить его на теги:

# List characters that you would want to exclude from your tags and clean the string
$exclude = array( '/[?&\/]/', '/\s+/');
$replacements = array('', ' '); 
$tags = preg_replace($exclude, $replacements,  $tags);

# Now split:
$tagsArray = explode(' ', $tags);

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

2
ответ дан 18 December 2019 в 05:20
поделиться

Вы сказали, что хотели, чтобы это работало как stackoverflow теггер. Этот теггер разделяет их пробельным символом "".

Если Вы хотели бы, чтобы это было Вашим поведением также, просто используйте:

mb_split('\s+', $text)

вместо:

mb_split('\W+', $text)

Удачи!

2
ответ дан 18 December 2019 в 05:20
поделиться

Я использую этот smart_explode () функция для парсинга тегов в моем приложении:

function smart_explode ($exploder, $string, $sort = '') {
  if (trim ($string) != '') {
    $string = explode ($exploder, $string);
    foreach ($string as $i => $k) {
      $string[$i] = trim ($k);
      if ($k == '') unset ($string[$i]);
    }
    $u = array_unique ($string);
    if ('sort' == $sort) sort ($u);
    return $u;
  } else {
    return array ();
  }
}

Это взрывает $string в массив при помощи $exploder как разделитель (обычно запятая), удаляет дублированный, обрезает пробелы вокруг тегов и даже сортирует теги для Вас, если $sort является 'видом'. Это возвратит пустой массив, когда ничто не будет в $string.

Использование похоже:

$mytaglist = smart_explode (',', '  PHP,  ,,regEx ,PHP');

Вышеупомянутое возвратится:

array ('PHP', 'regEx')

Для фильтрации символов, Вы не любите, делаете a

 $mytaglist = str_replace (array ('?', '$', '%'), '_', $mytaglist);

прежде smart_exploding (список “плохих” символов в массиве, который будет заменен подчеркиванием).

1
ответ дан 18 December 2019 в 05:20
поделиться

Корректный подход к обработке тегов зависит от Ваших предпочтений на обработке входа: можно или удалить недопустимые теги полностью или попытаться убрать теги, таким образом, они становятся допустимыми.

Белый список подхода к определению допустимых символов должен использоваться в очистке входа - существует просто слишком много проблематичных символов для помещения в черный список.

mb_internal_encoding('utf8');

$tags= 'to# do!"¤ fix-this str&ing';
$allowedLetters='\w';
// Note that the hyphen must be first or last in a character class pattern,
// to match hyphens, instead of specifying a character set range
$allowedSpecials='_+#-';

Первый подход удаляет недопустимые теги полностью:

// The first way: Ignoring invalid tags

$tagArray = mb_split(' ', $tags);

$pattern = '^[' . $allowedLetters . $allowedSpecials . ']+$';

$validTags = array();
foreach($tagArray as $tag)
{
    $tag = trim($tag);
    $isValid = mb_ereg_match($pattern, $tag);
    if ($isValid)
        $validTags[] = $tag;
}

Второй подход пытается убрать теги:

// The second way: Cleaning up the tag input

// Remove non-whitelisted characters
$pattern = '[^' . $allowedLetters . $allowedSpecials .']';

$cleanTags = mb_ereg_replace($pattern, ' ', $tags);

// Trim multiple white spaces.
$pattern = '\s+';
$cleanTags = mb_ereg_replace($pattern, ' ', $cleanTags);

$tags = mb_split(' ',$cleanTags);

Замена запрещенных символов с пробелом иногда приводит к проблемам - например, вышеупомянутое "str&ing" преобразовывается в "луг ул.". Удаление запрещенных символов полностью привело бы к "строке", которая более полезна в некоторых случаях.

1
ответ дан 18 December 2019 в 05:20
поделиться

Использовать preg_match_all.

$tags = array();
if(preg_match_all('/\s*(.*)\s*/U',$tags)) unset($tags[0]);
//now in $tags you have an array of tags. 

если теги находятся в UTF-8, добавить u модификатор к regexp.

0
ответ дан 18 December 2019 в 05:20
поделиться
Другие вопросы по тегам:

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