使用PHP正则表达式获取字符串

时间:2013-07-08 08:22:13

标签: php regex preg-replace

我有一个像这样的字符串

  

FranceGrosFrèreetSur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5   漂亮的黄色水果鼻子,一些香草味,清脆爽口 http://(www)。例。 COM / 23232

我希望在8.5(粗体)之后提取字符串,我们可以使用#wwww#bbbbb它们将保持不变,甚至不更改字符数。< / p>

8.5可以更改它,甚至可以是73.2等。

另外,如何从字符串的末尾排除网址?

以最小的错误风险实现这一目标的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

快速&amp;脏:

\#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 Hello World

或者像这样

  

blabla #wwwwwwwwwwwwwwww #bbb 1337 Hello World

或者像这样:

  

#w #bHello World


您可以看到结果here

编辑:

根据要求,这个还应该删除字符串中的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;
}
?>

结果应为:

  

漂亮的黄色水果香气,一些香草味,清脆爽口

答案 1 :(得分: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]+ - 是至少一个或多个

的数字

(.*) - 是数字之后的任何字符的子模式。

echo $match[1];打印您想要的内容:)

答案 2 :(得分:1)

描述

这个正则表达式将:

  • 将整个字符串捕获到最后的网址,因此如果网址存在,则可以排除该网址
  • #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有网址

[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