我有一个这样的示例字符串:(aibicidieif
更复杂的字符串但格式相似)我尝试了一个正则表达式,(?<=i).*?(?=i)
但它没有捕获第一个和最后一个元素a
和f
.
我想要i
分隔符之间的所有内容,但正则表达式只搜索i
它之前和之后的字符。有没有办法制作(?=i)
和(?<=i)
可选?
我有一个这样的示例字符串:(aibicidieif
更复杂的字符串但格式相似)我尝试了一个正则表达式,(?<=i).*?(?=i)
但它没有捕获第一个和最后一个元素a
和f
.
我想要i
分隔符之间的所有内容,但正则表达式只搜索i
它之前和之后的字符。有没有办法制作(?=i)
和(?<=i)
可选?
您使用什么语言?在大多数语言中,您可以使用正则表达式拆分字符串,例如在 Python 中:
>>> re.split(r'i', 'aibicidieifi')
['a', 'b', 'c', 'd', 'e', 'f', '']
这里r'i'
可以用一个字符串替换,代表更复杂的正则表达式。
或者,您可以执行以下操作:
(?<=i|^).*?(?=i|$)
通过在前瞻和后视中添加交替的锚点,您现在仍将匹配字符串开头和结尾的字符,但是某些语言不支持可变长度后视,因此这可能不起作用。
如果您的语言不支持可变长度的lookbehinds,这里有一个仍然可以使用的替代方法:
(?:(?<=i)|^).*?(?=i|$)
不会简单地[^i]+
完成工作吗?
假设输入字符串和定界符与您想的一样简单,只需执行以下操作,
$valuesArray = explode('i', $input);
然后访问创建的数组中的值。