Я работаю над сценарием PHP, в котором формат одной из строк, которые я получаю в качестве входных данных, неизвестен. Например, я могу получить вход:
user Name <7a240011-1b54-4a91-be27-a5cf8f474a39
Или я мог бы получить вход:
7a240011-1b54-4a91-be27-a5cf8f474a39
Моя проблема, если строка приходит так:
user Name <7a240011-1b54-4a91-be27-a5cf8f474a39
Как мне удалить user Name <
так что все, что мне осталось, это UUID?
Теперь, что делает это еще сложнее, UUID никогда не бывает одинаковым и
user Name <
всегда будет иметь другое имя.
самое простое решение состоит в том, что вы можете просто скинуть все до первого появления<». я заменил здесь «имя» двумя примерами имен для иллюстрации:
<?php
$name1 = "user Michael <7a240011-1b54-4a91-be27-a5cf8f474a39";
$name2 = "user Jasvinder <7a240011-1b54-4a91-be27-a5cf8f474a39";
print substr($name1, strpos($name1, "<")+1);
print substr($name2, strpos($name2, "<")+1);
заметьте, однако, что если поле «Имя» содержит «<будут трудности.
редактировать
Теперь, когда вы приняли это как решение, я хотел бы изменить его на что-то лучшее:
<?php
$name1 = "user Michael <7a240011-1b54-4a91-be27-a5cf8f474a39";
$name2 = "user Jasvinder <7a240011-1b54-4a91-be27-a5cf8f474a39";
$name3 = "7a240011-1b54-4a91-be27-a5cf8f474a39";
print preg_replace("/^.*\</","",$name1);
print preg_replace("/^.*\</","",$name2);
print preg_replace("/^.*\</","",$name3);
это обрабатывает оба случая, которые предыдущий, как было отмечено, не
Это похоже на одно из немногих законных применений регулярных выражений. После написания регулярного выражения для соответствия UUID (например, этот), вы можете бросить свою строку в preg_match
, и если в нем есть какие-либо UUID, он их найдет, и вы сможете их извлечь.
Вы можете легко сделать это с strpos
а также substr
, strpos
возвращает индекс символа или false
если это не найдено. Таким образом, вы можете оставить строку без изменений, если она не содержит <
,
Обратите внимание, что вам нужен оператор строгого сравнения (===
или же !==
) при проверке false
потому что строка может содержать <
на позиции 0
. =, который также оценивается как ложный (или наоборот) при сравнении с использованием обычных операторов сравнения (==
, !=
).
<?php
$x = 'user Name <7a240011-1b54-4a91-be27-a5cf8f474a39';
// Find the position of the `<`.
$p = strpos($x, '<');
// If that character exists, copy only the part after it.
if ($p !== false) {
$x = substr($x, $p+1);
}
echo $x;
Вы можете легко сделать из этого функцию, чтобы вызывать ее из любого места. И, как вы можете видеть, он обрабатывает случаи для разных имен пользователей или просто для кода без имени пользователя:
<?php
function getUserId($input) {
$p = strpos($input, '<');
if ($p !== false) {
$input = substr($input, $p+1);
}
return $input;
}
echo getUserId('user Name <7a240011-1b54-4a91-be27-a5cf8f474a39') . '<br>';
echo getUserId('user Longer Name <7a240011-1b54-4a91-be27-a5cf8f474a39') . '<br>';
echo getUserId('7a240011-1b54-4a91-be27-a5cf8f474a39') . '<br>'a;