2

我有一个这样的示例字符串:(aibicidieif更复杂的字符串但格式相似)我尝试了一个正则表达式,(?<=i).*?(?=i)但它没有捕获第一个和最后一个元素af.

我想要i分隔符之间的所有内容,但正则表达式只搜索i它之前和之后的字符。有没有办法制作(?=i)(?<=i)可选?

http://regexr.com?30mjf

4

3 回答 3

4

您使用什么语言?在大多数语言中,您可以使用正则表达式拆分字符串,例如在 Python 中:

>>> re.split(r'i', 'aibicidieifi')
['a', 'b', 'c', 'd', 'e', 'f', '']

这里r'i'可以用一个字符串替换,代表更复杂的正则表达式。

或者,您可以执行以下操作:

(?<=i|^).*?(?=i|$)

通过在前瞻和后视中添加交替的锚点,您现在仍将匹配字符串开头和结尾的字符,但是某些语言不支持可变长度后视,因此这可能不起作用。

如果您的语言不支持可变长度的lookbehinds,这里有一个仍然可以使用的替代方法:

(?:(?<=i)|^).*?(?=i|$)
于 2012-04-18T21:40:10.200 回答
0

不会简单地[^i]+完成工作吗?

于 2012-04-18T21:36:24.270 回答
0

假设输入字符串和定界符与您想的一样简单,只需执行以下操作,

$valuesArray = explode('i', $input);

然后访问创建的数组中的值。

于 2012-04-18T21:38:26.350 回答