Как получить строку, которая помещается в два символа звезды * как StackOverflow

#php #regex #php-5.3

#php #регулярное выражение #php-5.3

Вопрос:

Как я могу получить строку, которая помещается в два символа звезды — * — как StackOverflow здесь?

Например,

 $string_1 = 'this is the *string I want to display only*';
  

или

 $string_2 = 'this is the * string I want to display only *'; 
  

обратите внимание, что во второй строке есть пробелы.

Я хочу вернуть только это,

 string I want to display only
  

Использование регулярных выражений — это то, о чем я могу думать … есть идеи?

Комментарии:

1. Это несколько недоопределено. Что вы хотите, чтобы произошло, если строка содержит более двух * символов?

2. хороший вопрос! Я думаю, тогда он должен вернуть всю строку со звездами.

3. Это StackOverflow. Это вверху каждой страницы; Я не уверен, как вы дважды ошиблись в написании. 🙂

4. извините, Кен… сейчас поздняя ночь … lol

Ответ №1:

Вы можете сделать это с помощью простого регулярного выражения:

Это сохранит все совпадения в переменной matches .

 $string = "This string *has more* than one *asterisk group*";
preg_match_all('/*([^*] )*/', $string, $matches);
var_dump($matches[1]);
  

Ответ №2:

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

    $string_1 = 'this is the *string I want to display only*';

    if(preg_match_all('/*(.*?)*/',$string_1,$match)) {            
            var_dump($match[1]);            
    }
  

Комментарии:

1. Это не будет работать так же хорошо, как ответ танду. Строка hello *cruel* *world* вернет только один результат : cruel* *world .

Ответ №3:

Решение для регулярных выражений

 $string_2 = 'this is the * string I want to display only *'; 
$pattern = "/(*) [s]*[a-zA-Zs]*[s]*(*) /";
preg_match($pattern, $string_2, $matches);
echo $matches[0];
  

Решение строковых функций PHP, используя: strpos(), strlen() и substr()

 $string = 'this is the * string I want to display only *'; 
$findme   = '*';
$pos = strpos($string, $findme); // get first '*' position
if ($pos !== FALSE) {
    // a new partial string starts from $pos to the end of the input string
    $part = substr($string,$pos 1,strlen($string)); 
    // a new partial string starts from the beginning of $part to the first occurrence of '*' in $part
    echo substr($part,0,strpos($part, $findme)); 
}