需要正则表达式来提取由空格分隔的术语和用冒号分隔的键/值对


Need regex to extract terms separated by space and key/value pairs separated by colon?

我需要一个正则表达式来处理搜索字段中的关键字。这个想法是让它的行为非常像谷歌(即:支持双引号文本以允许带空格的术语(。 此外,我的数据集中有标签,我希望能够使用颜色引用这些标签。

示例输入为:

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

这应该输出:

1/2
one
two
three & four
five:six
seven:eight nine ten
只要有另一个捕获组与"六"和">

八九十"相关联,将"五"和"七"与其他关键字放在同一个捕获组中也可以正常工作。

正则表达式:

(('"['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:缩短