2015-11-05 3 views
0

Я пытаюсь использовать регулярное выражение, чтобы избавиться от первого и последнего слова в предложении, но он работает только тогда, когда я использую пробелы для соответствия, но это не работает когда я пытаюсь использовать границу слова. Почему это?Использование границы слова вместо пробелов в regex

Использование пространства:

$inputX = "she hates my guts"; 
preg_match("~ .+ ~i", $inputX, $match); 

print_r($match); 

Результат:

Array ([0] => hates my) 

Использование границы слова:

$inputX = "she hates my guts"; 
preg_match("~\b.+\b~i", $inputX, $match); 

print_r($match); 

Результат:

Array ([0] => she hates my guts) 
+0

Параметр '.' жаден так'. +? ', Но тогда результат 'she' потому, что начало строки является границей. – AbraCadaver

+2

'\ b' до« она »и после« кишок ». – anubhava

+0

@anubhava: Да, но это не 'preg_match_all()' так что только она. – AbraCadaver

ответ

1

Вот словоразделы:

s h e h a t e s m y g u t s 
^ ^^  ^^ ^^  ^

Так что ваш шаблон спички так:

s h e h a t e s m y g u t s 
^\_______________________________/^ 
|    |     | 
\b    .+    \b 

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

^\W*?\w+\s*|\s*\w+\W*$ 

И \W*, необходимо учитывать возможную пунктуацию (то есть she hates my guts.), но вы можете удалить их, если они не нужны.

+0

Эй, хорошая графика! – sln

0

Если вы хотите удалить первое и последнее слово в предложении, вы можете:

  1. explode() на пространствах
  2. удалить первый и последний элемент с array_slice()
  3. implode() обратно

Код

$inputX = "she hates my guts"; 
$result = implode(" ", array_slice(explode(" ", $inputX), 1, -1)); 

var_dump($result); 

Выход

string(8) "hates my" 
Смежные вопросы