繁体   English   中英

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

[英]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可以更改,甚至可以是73.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]; 打印你想要的:)

描述

此正则表达式将:

  • 捕获整个字符串,直到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有网址

[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM