У меня есть строка
$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.'
Приведенное ниже регулярное выражение будет соответствовать всем символам от начала до строки Optional Imprint
плюс следующие символы до первой точки.
^.*Optional Imprint[^.]*\.
$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.
Вы можете использовать функцию preg_match ():
if (preg_match('/.*Optional Imprint.*\./U', $description, $match))
echo $newDescription = $match[0];
else {
$newDescription = '';
echo 'no match';
}
U
опция не жадная опция. Это означает, что регулярное выражение будет соответствовать минимуму символов.
Вы можете использовать слова и точку в качестве разделителей.
$first_block = explode('Optional Imprint', $description);
$last_sentence = explode('.', $first_block[1]);
$description = $first_block . 'Optional Imprint' . $last_sentence . '.';