1

我有一个这样的字符串

法国 Gros Frère et Sur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5 漂亮的黄色水果香气,一些香草味,良好的脆度http://(www)。例子。com/23232

我想8.5在我们可以使用的(粗体)之后提取字符串#wwww#bbbbb它们将保持原样,甚至不会改变字符数。

8.5可以改变它可以是任何东西,甚至是一个73.2等等。

另外,如何从字符串末尾排除 url?

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

4

3 回答 3

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 #wwwwwwwwwwwwww #bbb 1337 你好世界

或者像这样:

#w #bHello 世界


你可以在这里看到结果

编辑:

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

结果应该是:

漂亮的黄色水果香气,一些香草味,脆度好

于 2013-07-08T08:32:31.407 回答
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];打印你想要的:)

于 2013-07-08T08:33:21.943 回答
1

描述

这个正则表达式将:

  • 将整个字符串捕获到最后的 url,因此如果 url 存在,则可以排除它
  • 捕获之后的数字#wwww #bbbbb
  • 允许数字包含一个或更少的小数点

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

在此处输入图像描述

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
于 2013-07-08T12:42:05.940 回答