【问题标题】:How can I parse out specific "tags" from a string in php如何从 php 中的字符串中解析出特定的“标签”
【发布时间】:2015-02-14 01:40:54
【问题描述】:

我喜欢 StackOverflow 允许您通过在搜索字段中指定 [tagname] 来搜索标签的方式。我该如何编写一个解析器来帮助我将标签与普通文本分开。我可以想到手动方式,即使用子字符串和/或正则表达式的某种组合来获取打开和关闭方括号的位置,然后提取这些字符串,但我很好奇是否有更好的方法(和我的正则表达式技能充其量是低于标准的)

// example
$query = 'How to use [jQuery] [selector] selectors';
$tags = getTags($query); // $tags == 'jQuery, selector'
$text = getText($query); // $text == 'How to use selectors'

【问题讨论】:

  • 只需使用正则表达式:/\[(.*?)\]/

标签: php parsing tags


【解决方案1】:

正则表达式可能是要走的路。您可以指定标签的设置方式越多,就越容易捕获正确的标签(在下面的表达式中,我将其限制为字母\w 或数字\d。该函数使用捕获组(包含在parens) 拉出相关标签。

function getTags($query) {
    preg_match_all("/\[([\w\d]+)\]/", $query, $matches);
    return $matches;
}

【讨论】:

    【解决方案2】:

    Regex 可能效果最好,只是不要尝试解析 HTML。 https://www.debuggex.com/ 是一个非常好的网站,可以直观地查看您的正则表达式字符串正在做什么。我建议阅读 PHP 正则表达式函数,并了解更多信息,网站底部有一个备忘。

    .*[(tag)].*
    

    可以使用捕获的组来获取标签。 preg_match_all 函数非常适合处理多个结果,只需确保阅读官方文档以使其按照您的需要工作。

    对于解析更复杂或不规则的东西(如 html,很难可靠地完成),最好手动完成。过去,Regex 已经满足了我所有的非 HTML 解析需求。

    【讨论】:

    • 感谢 Xeridea。我还刚刚找到了phpliveregex.com,它也可以作为调试工具使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多