检索由逗号分隔的字符串,忽略前导和尾随空格

Retrieve strings delimited by comma ignoring leading and trailing spaces

我尝试创建正则表达式模式来检索由逗号分隔但也由逗号前后加空格分隔的字符串。 该项目的另一个要求是检索到的字符串不能有尾随空格。

这必须与 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,])

但它不接受字符串中的空格并忽略测试字符串边缘的字符串,除非它们在末尾有尾随空格或在测试字符串开头有前导空格。

谢谢

您可以使用以下内容:

(\b[^,]+\b)

RegEX DEMO

免责声明: 如果您的字符串 start/end 没有任何特殊字符,此方法有效。

This must work with php preg_match_all function.

如果你不想使用explode,你可以使用一个相当复杂的正则表达式,比如

'~(?:^|,)\s*\K(?=[^,]*[^\s,])[^,]+?(?=\s*(?:,|$))~'

regex demo

细分:

  • (?:^|,) - 匹配字符串的开头或 ,
  • \s* - 零个或多个空格
  • \K - 从匹配值中省略当前匹配的符号
  • (?=[^,]*[^\s,]) - 仅在下一个 ,
  • 之前要求该值不是空白
  • [^,]+? - 尽可能少地匹配除 , 之外的一个或多个字符,以容纳以下空格(如果有)
  • (?=\s*(?:,|$)) - 确保有零个或多个空格后跟 , 或字符串结尾的前瞻。