Как правильно разорвать эту строку - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть строки, которые имеют следующий шаблон.Some text on some more text before some text.

Как мне найти

  • положение слова «до» и убрать его с чем-либо после него,
  • и положение слова «вкл»и удалить его чем-нибудь перед этим?

Ответы [ 6 ]

3 голосов
/ 30 сентября 2011

Регулярные выражения для этого излишни. Просто создайте подстроку из того места, где вы находите "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);
2 голосов
/ 30 сентября 2011
preg_match('~\bon\b(.+)\bbefore\b~',$text,$match);
//use $match[1]; e.g $text=$match[1];
1 голос
/ 30 сентября 2011
    $var="Some text on some more text before some text";
preg_match('/\bon\b(.*)\bbefore\b/',$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"); тоже, это вернет позицию первого символа.

1 голос
/ 30 сентября 2011

Попробуйте это:

<?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

1 голос
/ 30 сентября 2011

рассмотрите возможность использования регулярных выражений:

$text= "Some text on some more text before some text";
$pattern = '/^.* on(.*)before.*$/';

preg_match($pattern, $text, $matches);
if($matches) {
    print $matches[1];
}
0 голосов
/ 30 сентября 2011
$str = 'Some text on some more text before some text';
$str = str_replace(array('on','before'), '', $str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...