我喜欢StackOverflow如何通过在搜索字段中指定[tagname]
来搜索标签。我怎样才能编写一个解析器来帮助我将标签与普通文本分开。我可以想到使用子串和/或正则表达式的某种组合来获得打开和关闭方括号的位置的手动方式,然后提取出那些字符串,但我很好奇是否有'一个更好的方式(我的正则表达式技能最多不足)
// example
$query = 'How to use [jQuery] [selector] selectors';
$tags = getTags($query); // $tags == 'jQuery, selector'
$text = getText($query); // $text == 'How to use selectors'
答案 0 :(得分:1)
正则表达式可能效果最好,只是不要尝试解析HTML。 https://www.debuggex.com/ 是一个非常好的网站,可以直观地看到你的正则表达式字符串正在做什么。我建议阅读PHP正则表达式函数,并了解更多信息,网站底部有一个cheatsheat。
.*[(tag)].*
使用捕获的组可以获取标记。 preg_match_all 功能非常适合处理多个结果,只需确保阅读官方文档以使其按您需要的方式工作。
为了解析更复杂或不规则的事情(比如html,这是非常难以可靠的),最好手动完成。 Regex过去一直致力于解决我的所有非HTML解析需求。
答案 1 :(得分:1)
正则表达可能是要走的路。您可以越多地指定标记的设置越容易捕获正确的标记(在下面的表达式中,我将其限制为字母\w
或数字\d
。该函数使用捕获组(包括在parens中)以提取相关标签。
function getTags($query) {
preg_match_all("/\[([\w\d]+)\]/", $query, $matches);
return $matches;
}