我尝试创建正则表达式模式以检索由逗号分隔的字符串,但也使用逗号前面或后面跟空格。 该项目的另一个要求是检索到的字符串不能有尾随和前导空格。
这必须与php preg_match_all函数一起使用。
示例1: 测试字符串是:
' Monday,Tuesday, Wednesday ,Hello World , Lorem ipsum dolor sit amet , , a b c d e '预期结果是检索到的字符串:
'Monday' 'Tuesday' 'Wednesday' 'Hello World' 'Lorem ipsum dolor sit amet' 'a b c d e'
示例2: 测试字符串是:
'Monday, Tuesday'
预期结果是检索到的字符串:
'Monday' 'Tuesday'
我试图通过使用像这样的正向前瞻和积极的外观来实现它
(?<=[\s,]).*?(?=[\s,])
但它不接受字符串中的空格并忽略测试字符串边缘的字符串,除非它们在结尾处有尾随空格或在测试字符串的开头处有前导空格。
谢谢
答案 0 :(得分:2)
答案 1 :(得分:2)
这必须与php
preg_match_all
函数一起使用。
如果您不想使用explode
,可以使用相当复杂的正则表达式
'~(?:^|,)\s*\K(?=[^,]*[^\s,])[^,]+?(?=\s*(?:,|$))~'
请参阅regex demo
故障:
(?:^|,)
- 匹配字符串的开头或,
\s*
- 零个或多个空格\K
- 省略匹配值(?=[^,]*[^\s,])
- 要求该值不是仅在下一个,
[^,]+?
- 尽可能少地匹配,
以外的一个或多个字符以容纳以下空格(如果有)(?=\s*(?:,|$))
- 前瞻确保零个或多个空格后跟,
或字符串结尾。