2016-02-12 69 views
0

我需要一个正则表达式来处理来自搜索字段的关键字。这个想法是让它的行为非常像谷歌(即:支持双引号文本,允许与空间条款)。此外,我有我的数据集中的标签,我希望能够使用颜色进行引用。需要正则表达式来提取由空格和键/值对分隔的用冒号分隔的术语?

样本输入将是:

1/2 one two "three & four" five:six seven:"eight nine ten" 

这应该输出:

1/2 
one 
two 
three & four 
five:six 
seven:eight nine ten 

这也将正常工作有“十二五”和“七”相同的捕获组作为其他的关键词,只要有另一个捕获组与'六'和'八九十'相关联。

+3

灿你分享你的'有没有试过? –

+0

研究'lookahead regex' – Jeff

+0

@JayBlanchard我最近来的是'([^ \ s“':] +)|(”[^“] *”|'[^'] *')' – marlboro

回答

0

正则表达式:

((\"[\s\S]+?\")|[\s\S]+?(:(?2))?)\K(\s+|$) 

换人:

\r\n 

说明:

获取一切可能的一切在两者之间引号(开始用空格或:),然后重新设置正则表达式匹配,然后匹配任何空格或字符串的结尾。这意味着它只匹配空格或字符串的结尾,然后用换行符替换它。

用途:

$re = "/((\\\"[\\s\\S]+?\\\")|[\\s\\S]+?(:(?2))?)\\K(\\s+|$)/"; 
$str = "1/2 one two \"three & four\" five:six seven:\"eight nine ten\""; 
$subst = "\r\n"; 

$result = preg_replace($re, $subst, $str); 

演示:https://regex101.com/r/jO4oM0/3

编辑1:改进为不正确匹配一切正常
编辑2:缩短

相关问题