首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP正则表达式中的Trim子字符串

问PHP正则表达式中的Trim子字符串
EN

Stack Overflow用户
提问于 2014-01-07 15:30:39
回答 3查看 77关注 0票数 2

我有一个字符串,它可能包含如下模式:

代码语言:javascript
复制
LINK([anchor text],[link])

我想要做的是将这个表达式转换成一个HTML链接:

代码语言:javascript
复制
<a href="link">anchor text</a>

目前,我正在用以下PHP片段来替换:

代码语言:javascript
复制
$string = 'LINK(  some anchor text    ,   http://mydomain.com  )';
$search = '/LINK\s*\(\s*(.+),\s*([^\s]+)\s*\)/';
$replace = '<a href="$2">$1</a>';
preg_replace($search, $replace, $string);

我面临的问题是锚文本后面的空格。幸运的是,在HTML中,多个空格被解释为单个空格,但在本例中,我将显示一个带有(带下划线的)恼人空间的链接。有什么方法可以修剪这个锚文本吗?我不能把它当作“链接”子字符串,因为它可能包含空格。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-07 15:37:34

假设锚文本不能包含逗号或一行中超过一个空格,则可以使用:

代码语言:javascript
复制
LINK\s*\(\s*([^\s,]+(?:\s[^\s,]+)*)\s*,\s*(\S+)\s*\)

regex101演示

我使用的不是.+,而是[^\s,]+(?:\s[^\s,]+)*,它将匹配一个单词,更多的单词由空格分隔(其中一个单词是一系列至少有一个字符的非空格字符)。

还将被否定的类[^\s]更改为\S。

票数 2
EN

Stack Overflow用户

发布于 2014-01-07 15:51:52

您可以使相关的量词变懒,使它们不会在,或)之前占用空白。

代码语言:javascript
复制
'/LINK\(\s*(.+?)\s*,\s*([^\s]+?)\s*\)/'

通过在?之后添加+。

测试

票数 1
EN

Stack Overflow用户

发布于 2014-01-07 15:52:43

在这种情况下,您可以做的是将第一组更改为懒惰地分组。

代码语言:javascript
复制
$search = '/LINK\s*\(\s*(.+),\s*([^\s]+)\s*\)/';

可改为:

代码语言:javascript
复制
$search = '/LINK\s*\(\s*(.+?)\s*,\s*([^\s]+)\s*\)/';

注意加号后面的问号。这告诉程序使用最少的字符数来匹配它。

在这种情况下,它可以匹配的最懒的是一个字符串,后面跟着任意数量的空格,然后是逗号。

在最初的情况下,这将是贪婪的匹配。这意味着它将尝试匹配尽可能多的字符,从而导致.+匹配逗号以下的所有字符。

这是代码的一个regex101。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20975544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档