2016-02-29 2 views
3

Я хочу, чтобы найти строку между первым и последним подчеркивания (_) из приведенных ниже строкПолучить строку между первым и последним пространственным характером

Я попытался это:

$s = '23_The_Sample_Book_145236985.pdf'; 
$matches = []; 
$t = preg_match('/\_(.*?)\_/', $s, $matches); 
print_r($matches[1]); 

Я хочу, чтобы получить выход как ...

The_Sample_Book

Но я получаю как ...

The

+0

Является ли '$ s' обязательным? –

+7

Просто сделайте это жадным: '(. *?)' -> '(. *)' [Объяснено просто: '(. *?)' -> Возьмите минимум, чтобы сделать совпадение; '(. *)' -> Принять как можно больше, чтобы сделать матч] – Rizier123

+0

yes $ s строка показывает мой обновленный ответ. – vishuB

ответ

2

надеюсь, что это помогает

$s = '23_The_Sample_Book_145236985.pdf'; 
    $matches = []; 
    $t = preg_match('/\_(.*)\_/', $s, $matches); 
    print_r($matches[1]); 

скриншот проверки enter image description here

+4

Зачем OP «попробуйте это»? *** Хороший ответ *** всегда будет объяснять, что было сделано и почему это было сделано таким образом, не только для OP, но и для будущих посетителей SO. –

+0

@vishu: проверьте вашу желаемую информацию –

2

Это следует сделать это:

<?php 
$s = '23_The_Sample_Book_145236985.pdf'; 

// Separate the string based on underscore and create an array 
$arr = explode('_', $s); 

// Remove the first and last array elements 
// 23 and 145236985.pdf in the case of this string 
$arr = array_slice($arr, 1, (count($arr)-2)); 

// Rejoin with an underscore 
echo implode('_', $arr); 
+0

Можете ли вы объяснить, как это работает? – Martin

+1

@ Мартин терпение - это добродетель ... – MonkeyZeus

+0

Спасибо за обновление :-) – Martin

2

Это должно сделать это, хотя оно не использует регулярное выражение:

$s = '23_The_Sample_Book_145236985.pdf'; 
//get the position of the FIRST ocurrence of '_' 
$begin = strpos($s, '_') + 1; 
//get the position of the LAST ocurrence of '_' 
$end = strrpos($s, '_'); 
//prints what's in between 
echo substr($s, $begin, $end - $begin); 
+0

Интересный подход. – Martin

+0

Спасибо @Martin! –

+0

Зачем ПП «попробовать это»? *** Хороший ответ *** всегда будет объяснять, что было сделано и почему это было сделано таким образом, не только для OP, но и для будущих посетителей SO. –

Смежные вопросы