[英]Get string with PHP regular Expression
我有这样的字符串
法国GrosFrèreet Sur Hte-Cote de Nuit Blc 2008 #wwww #bbbbb 8.5 很好的黄色水果香气,一些香草的香气,良好的脆性 http://www.com.cn/。 例。 com / 23232
我想在8.5
(粗体)之后提取字符串,我们可以使用#wwww
和#bbbbb
它们将保持原样,甚至不改变字符数。
这个8.5
可以更改,甚至可以是7
或3.2
等。
另外,如何从字符串末尾排除URL?
以最小的错误风险实现此目标的最佳方法是什么?
快速与肮脏:
\#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 #wwwwwwwwwwwwwwwwwww #bbb 1337你好世界
或像这样:
#w #b你好世界
你可以在这里看到结果
编辑:
根据要求,这还应删除字符串内的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;
}
?>
结果应为:
黄色的水果香气,带有些许香草味,松脆度佳
使用简单的正则表达式
$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];
打印你想要的:)
此正则表达式将:
#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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.