Nano Hash - криптовалюты, майнинг, программирование

PHP: использование strpos() для поиска только иглы

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

$mystring = '123/abc';
$findme   = 'abc';
$pos = strpos($mystring, $findme); // THIS IS FINE

$mystring = '123/abcdefghijk';
$findme   = 'abc';
$pos = strpos($mystring, $findme); // THIS IS NOT FINE

Итак, мне нужно проверить длину строки найденной строки и сопоставить ее с иглой, чтобы увидеть, имеют ли они одинаковую длину. Таким образом, 123/abc правильно соответствует abc, но я не хочу, чтобы 123/abcdefghijk соответствовал abc, потому что он намного длиннее 3 символов.

04.01.2010

  • Вы говорите, что хотите, чтобы совпадение было успешным, только если ваша игла находится в конце строки? 04.01.2010

Ответы:


1

substr() может принимать отрицательный аргумент3, который считается с конца строки. Итак, вычислите длину иглы, отсчитайте столько же символов с конца и сравните ее с иглой:

if (substr($mystring, -strlen($findme)) == $findme) {
  ...
}
04.01.2010

2

Вопрос довольно расплывчатый («123/abc» явно длиннее 3 символов!), но вы можете искать substr_compare() с отрицательным индексом.

04.01.2010

3

Вы говорите, что косые черты значительны, т.е. вы хотите сопоставить иглу только тогда, когда она входит в серию токенов, разделенных косой чертой?

Если это так, вы можете попробовать регулярное выражение:

preg_match('/(^|\/)abc($|\/)/', $mystring, $matches, PREG_OFFSET_CAPTURE);
$pos= FALSE;
if (count($matches)>=1)
    $pos= $matches[0][1];

Или разделите косую черту и работайте с отдельными частями строки:

$parts= explode('/', $mystring);
$pos= array_search($parts, 'abc');
if ($pos!==FALSE)
    $pos= count(implode('/', array_slice($parts, 0, $pos)));

Regex, вероятно, немного быстрее. Но последнее было бы лучше, если вам нужно сопоставить произвольные строки, разделенные косой чертой, которые могут содержать специальные символы регулярного выражения.

04.01.2010
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..