regex — PHP обрезанный конец строки в конце конкретного предложения

У меня есть строка

$description = 'Front: 1 1/2" W x 1" H ... Back: 2 1/4" W x 1 1/4" H Standard Imprint Area is the front. Optional Imprint Area is the back. Imprint on Standard Location Unless Otherwise Specified on Order. For Printing on Both Positions, Add $40.00(G) Set Up Plus .25(G) Per Piece.'

Мне нужно обрезать строку до того, которое имеет предложение, которое содержит текст «Дополнительный отпечаток» в качестве последнего предложения.

Итак, если текст содержит «Необязательный отпечаток», найдите конец предложения и отбросьте все символы после его конечной точки, период(.).

Что мне нужно вернуть из приведенного выше примера:

$description = 'Front: 1 1/2" W x 1" H ... Back: 2 1/4" W x 1 1/4" H Standard Imprint Area is the front. Optional Imprint Area is the back.'

0

Решение

Приведенное ниже регулярное выражение будет соответствовать всем символам от начала до строки Optional Imprint плюс следующие символы до первой точки.

^.*Optional Imprint[^.]*\.

DEMO

$description = 'Front: 1 1/2" W x 1" H ... Back: 2 1/4" W x 1 1/4" H Standard Imprint Area is the front. Optional Imprint Area is the back. Imprint on Standard Location Unless Otherwise Specified on Order. For Printing on Both Positions, Add $40.00(G) Set Up Plus .25(G) Per Piece.';
$regex = '~^.*Optional Imprint[^.]*\.~';
if (preg_match($regex, $description, $m)) {
$yourmatch = $m[0];
echo $yourmatch;
}

Выход:

Front: 1 1/2" W x 1" H ... Back: 2 1/4" W x 1 1/4" H Standard Imprint Area is the front. Optional Imprint Area is the back.
1

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

Вы можете использовать функцию preg_match ():

if (preg_match('/.*Optional Imprint.*\./U', $description, $match))
echo $newDescription = $match[0];
else {
$newDescription = '';
echo 'no match';
}

U опция не жадная опция. Это означает, что регулярное выражение будет соответствовать минимуму символов.

1

Вы можете использовать слова и точку в качестве разделителей.

$first_block = explode('Optional Imprint', $description);
$last_sentence = explode('.', $first_block[1]);
$description = $first_block  . 'Optional Imprint' . $last_sentence . '.';
0
По вопросам рекламы [email protected]