2013-07-08 5 views
1

У меня есть строка, как этоПолучить строку с PHP регулярное выражение

Франция Gros Frère и др Сур Hte-Кот де Nuit Blc 2008 #wwww #bbbbb 8,5 Ницца желтый фруктовым нос, некоторые ванильные ноты, хорошо crispness http: // (www). пример. ком/23232

Я хочу, чтобы извлечь строку после 8.5 (выделены жирным шрифтом), мы можем использовать #wwww и #bbbbb они останутся как есть, даже изменение количества символов.

Это 8.5 может изменить это может быть что угодно, даже 7 или 3.2 т.д.

Кроме того, как я могу исключить URL из конца строки?

Каков наилучший способ достичь этого с минимальным риском ошибки?

+0

@Anirudh У меня есть идея взрыва с '#bbbb b' и сделать что-то. Я ожидаю эррос, поэтому я ищу лучшее решение. – niksmac

ответ

4

Быстрый & Грязные:

\#w+ \#b+ \d+(?:\.?\d+)? (.*) 

Пример:

<?php 
$string = "France Gros Frère et Sur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5 Nice yellow fruit nose, some vanilla notes, good crispness"; 
$regex = "/\#w+ \#b+ \d+(?:\.?\d+)? (.*)/"; 
preg_match ($regex, $string, $output); 

echo $output[1]; 
?> 

Но если может быть строкой, без какого-либо числа после #bbbbb, то лучше использовать это:

\#w+ \#b+\s*(?:\d+(?:\.\d+)?)?\s*(.*) 

Поэтому вам не нужно указывать номер после #bbbbb, и вы можете использовать столько пробелов, сколько хотите, между #bbbbb, номер (если есть) и строку, которую вы хотите извлечь.

Большинство из них не является обязательным, так что ваша строка может выглядеть следующим образом:

BlaBla #W #BB привет мир

Или как этот

BlaBla #wwwwwwwwwwwwwwww # bbb 1337 Hello World

Или как t его:

#W #bHello Мир


Вы можете увидеть результат here

EDIT:

В соответствии с просьбой, это также следует удалить URL-адреса внутри из строка:

<?php 
$string = "France Gros Frère et Sur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5 Nice yellow fruit nose, some vanilla notes, good crispness http://www.example.com/23232"; 
$regex = "/\#w+ \#b+ \d+(?:\.?\d+)? (.*)/"; 
preg_match ($regex, $string, $output); 

if (isset($output[1])) { 
    $regex = "!https?:\/\/(?:[\da-z\.-]+)\.(?:[a-z\.]{2,6})(?:[\/\w \.-]*)*\/?!"; 
    $newString = trim(preg_replace ($regex, '', $output[1])); 

    echo $newString; 
} else { 
    echo $string; 
} 
?> 

Результат должен быть:

Ницца желтый нос фруктов, некоторые ванильные ноты, хороший рассыпчатость

+0

Я добавил пример. – user2557188

+0

десятичная часть необязательна – niksmac

+0

Это '(?: \.? \ D +)?' – user2557188

2

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

$a='France Gros Frère et Sur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5 Nice yellow fruit nose, some vanilla notes, good crispness'; 

preg_match('/\#bbbbb [0-9]+\.[0-9]+ (.*)/', $a, $match); 

print_r($match); 

[0-9]+ - это число по меньшей мере, один или более

(.*) - это подшаблон для любого символа, который идет после num бер.

echo $match[1]; печатает то, что вы хотите :)

+1

+1 но десятичная часть необязательна – Anirudha

+0

десятичная часть не является обязательной – niksmac

1

Описание

Это регулярное выражение будет:

  • захвата вся строка ДО URL-адрес в конце, так что URL может быть исключен, если она существует
  • фиксировать номер после #wwww #bbbbb
  • разрешить номер содержать одну или менее десятичных точек

(.*?\#wwww\s\#bbbbb\s((?:\d+\.)?\d+).*?)(https?:\/\/\S*)?$

enter image description here

PHP Пример

Образец текста

France Gros Frère et Sur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5 Nice yellow fruit nose, some vanilla notes, good crispness http://www.example.com/23232

код

<?php 
$sourcestring="your source string"; 
preg_match('/(.*?\#wwww\s\#bbbbb\s((?:\d+\.)?\d+).*?)(https?:\/\/\S*)?$/imx',$sourcestring,$matches); 
echo "<pre>".print_r($matches,true); 
?> 

Захват Группы

0 имеет всю строку
1 имеет всю строку, исключающую URL в конце концов, если он существует
2 имеет нужный номер
3 имеет URL

[0] => France Gros Frère et Sur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5 Nice yellow fruit nose, some vanilla notes, good crispness http://www.example.com/23232 
[1] => France Gros Frère et Sur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5 Nice yellow fruit nose, some vanilla notes, good crispness 
[2] => 8.5 
[3] => http://www.example.com/23232 
Смежные вопросы