substr, чтобы найти весь текст перед подстрокой подстановочного знака

Я пытаюсь получить все символы перед подстрокой подстановочного знака. Например, если у меня есть следующая строка:

I.Want.This.Bit.D00F00.Non.Of.This

Итак, я хочу, чтобы результат был I.Want.This.Bit

D и F в D00F00 всегда будут там, но целые числа в промежутке изменится. Так может быть D13F02, или же D01F15, Будет не более 2 целых чисел после D и F,

Я думал о том, чтобы сделать следующее, но потом понял, что это не сработает:

$string = "I.Want.This.Bit.D00F00.Non.Of.This"$substring = substr($string, 0, strpos($string, '.D'));

Причина, по которой это не сработает, заключается в том, что есть шанс, что часть строки, которую я хочу сохранить, может иметь .D в нем, например The.Daft.String.D03F12, Используя этот пример, все, что я хотел бы получить, это The в качестве выхода, а не The.Daft.String,

Любое руководство будет высоко ценится.

0

Решение

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

<?php

$pattern = "/^([A-Za-z\.]+)\.D[0-9]{2}F[0-9]{2}/";
$subject = "I.Want.This.Bit.D00F00.Non.Of.This";

preg_match($pattern, $subject, $matches);
print_r($matches);

В этом случае захваченная группа, которую вы хотите, будет в $ match [1].

Вы можете поиграть с / протестировать регулярное выражение здесь: https://regex101.com/r/sM4wN9/1

2

Другие решения

Вот фрагмент рабочего кода (с Devins Regexp):

$string = "I.Want.This.Bit.D00F00.Non.Of.This";
preg_match('/(.*)D[0-9]{2}F[0-9]{2}/', $string, $matches);
echo $matches[1];
1

Посмотрите на этот вопрос и ответьте на переполнение стека.

Как мне найти индекс соответствия регулярному выражению в строке?

Вы можете запустить регулярное выражение для D [0-9] {2} F [0-9] {2}, чтобы получить индекс D, а затем передать его в ваш substr, и это даст вам первую половину. Проблема может возникнуть только в том случае, если по какой-то причине в той части, которую вы хотите сохранить, есть ваш шаблон.

Надеюсь, это поможет!

0

Вы можете использовать регулярные выражения для этого (https://php.net/manual/en/book.pcre.php), например

$subString = preg_replace('~\.D\d{2}+F\d{2}\..*$~', '', $string);
0
По вопросам рекламы [email protected]