php - 如何解析句子中URL末尾的句号?

标签 php regex

这是我目前所拥有的:

/(^|\s)(http:\/\/(\S+)(?!(.png|.gif|.jpg)($|\.\s|\.$|\s)))($|\.\s|\.$|\s)/i

我正在这样替换它:

'$1<a href="$2">$2</a>$6'

有时,我的用户会键入如下内容:http://google.com . <- 如何在不解析 URL 中的其他句点的情况下避免包含最后一个句点?

此外,如果您想知道 .gif .png 等的用途,我正在解析图像以自动创建元素。

编辑: 这是针对 PHP 的。

这是一个论坛,用户可以在其中发布很多内容,包括链接。它成功地处理了除了 URL 后面的标点符号之外的所有情况。

编辑 2: 解析可能是错误的词。我并不想删除标点符号,只是将其与 URL 分开,这样我就可以向我的用户显示有效链接。

编辑 3: http://daringfireball.net/2010/07/improved_regex_for_matching_urls 我还没有完全测试,但它似乎工作。我会在测试后将其作为解决方案。或者,如果其他人想要积分,请随时进行测试,我会为您的解决方案投票。

最佳答案

如此更新的解决方案:

/\b(http:\/\/(\S+(?<!\.)(?=(?:$|\s|\.(?:$|\s)))))(?<!(?:\.(?:png|gif|jpg)))/i

查看here online on Regexr

我替换了你的(^|\s)通过 \b这正是您在这里想要的单词边界。

致您的(\S+)我改为(\S+(?<!\.)(?=(?:$|\s|\.(?:$|\s)))) .基本上我匹配每个非空格直到有 $|\s|\.(?:$|\s)前面,左边没有点((?<!\.) 部分)。

下面的环顾四周需要向后看。

然后我稍微清理了括号和交替并使用了一些非捕获组(以 (?: 开头的组)

所以对于你的测试字符串 users type something like this: http://google.com. <- How do I avoid它将匹配 http://google.com在第一组和google.com在第二组。

关于php - 如何解析句子中URL末尾的句号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087612/

相关文章:

php - 如何在 CodeIgniter 迁移中使用 down() 方法?

javascript - 正则表达式意外字符

正则表达式匹配 url 的特定最后一个路径部分

C# 正则表达式删除 C 风格注释并提取括号之间的文本

php - 如何在php中逐字节上传文件

php - MySQL INNER 连接取决于 php 变量是否等于一个字段

php - CSS 不适用于由 php 构建的表单

php - 使用 shell_exec() 重启服务器?

java - 正则表达式删除多个 html 嵌套标签

python - 尝试使其在 Django 上运行 Regex/url/views