我有一个像这样的字符串
FranceGrosFrèreetSur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5 漂亮的黄色水果鼻子,一些香草味,清脆爽口 http://(www)。例。 COM / 23232
我希望在8.5
(粗体)之后提取字符串,我们可以使用#wwww
和#bbbbb
它们将保持不变,甚至不更改字符数。< / p>
此8.5
可以更改它,甚至可以是7
或3.2
等。
另外,如何从字符串的末尾排除网址?
以最小的错误风险实现这一目标的最佳方法是什么?
答案 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*)?$
示例文字
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