#php #string
#php #строка
Вопрос:
У меня есть строки, которые имеют следующий шаблон. Some text on some more text before some text
.
Как мне найти
- позиция слова «до» и удалить его с чем-либо после него,
- и положение слова «вкл» и удалить его с чем-либо перед ним?
Комментарии:
1. Гарантированно ли, что слова
before
иon
будут встречаться в ваших предметах только один раз?2. @fireeyedboy да, только один раз, но только с пробелами вокруг них, такими как ` on`
3. И нужно ли также удалять пробелы вокруг них? Или только те, которые вокруг
on
?
Ответ №1:
Регулярные выражения для этого излишни. Просто создайте подстроку из того места, где вы находите «on», туда, где вы находите «before»:
$str = 'Some text on some more text before some text';
// Find " on "
$start = strpos($str, " on ");
// Check for errors
// Note the 3 ='s
if($start === FALSE) {
// Error occurred, do something
}
$start = 4; // Go after "on"
// Find " before "
$end = strpos($str, " before ", $start);
// Check for errors
// Note the 3 ='s
if($end === FALSE) {
// Error occurred, do something
}
// Get just the part we want
$length = $end - $start;
$result = substr($str, $start, $end - $start);
Комментарии:
1. Сбой в консоли при тестировании перед другим тестом.
2. $ str = ‘Текст консоли в тексте перед текстом’; $ res будет «единственным текстом в тексте» (найденным в word cinsole), а не полным словом.
3. @RiaD Я добавил пробелы вокруг поисковых слов
Ответ №2:
preg_match('~bonb(. )bbeforeb~',$text,$match);
//use $match[1]; e.g $text=$match[1];
Комментарии:
1. Я думал, что это правильно, но для этого нужны разделители и круглые скобки
.
. Затем используйте$match[1]
для захвата текста.
Ответ №3:
рассмотрите возможность использования регулярных выражений:
$text= "Some text on some more text before some text";
$pattern = '/^.* on(.*)before.*$/';
preg_match($pattern, $text, $matches);
if($matches) {
print $matches[1];
}
Ответ №4:
Попробуйте это:
<?php
$string = 'Some text on some more text before some text';
$newString = preg_replace('/(.*)on(.*)before(.*)/', '$2', $string);
echo $newString;
Регулярное выражение: http://regexr.com ?2uqq7
Демонстрация PHP: http://codepad.org/uXBL8IaA
Ответ №5:
$var="Some text on some more text before some text";
preg_match('/bonb(.*)bbeforeb/',$var,$match);
//Edit: You can use `(. )` too if, by any chance, there is no text between 'on' and 'before'.
print_r ($match);
//$match[1] has "some more text"
Это то, что вы хотите?
а что касается позиции, вы можете echo strrpos($var, " on ");
, если я правильно понял (как вы сказали в комментарии, что «вкл» имеет пробелы вокруг него. echo strrpos($var, "before");
кроме того, это вернет позицию первого символа.
Ответ №6:
$str = 'Some text on some more text before some text';
$str = str_replace(array('on','before'), '', $str);
Комментарии:
1. Это просто удаляет слова «on» и «before» из $str. Результирующий текст будет «Некоторый текст, еще немного текста, немного текста»