2015-04-02 2 views
0

То, что я пытаюсь сделать, это получить все символы перед подстрокой подстановки. Например, если у меня есть следующая строка:substr, чтобы найти весь текст перед подстрокой подстановки

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

Итак, я хочу выход быть I.Want.This.Bit

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

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

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

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

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

ответ

2

Возможно, лучше использовать 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

0

Взгляните на этот вопрос и ответ на переполнение стека.

How do I find the index of a regex match in a string?

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

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

0

Вот рабочий фрагмент кода (с Девинс 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]; 
Смежные вопросы