如何在正则表达式中进行可选的断言?

时间:2012-04-18 21:28:51

标签: regex

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

我希望f分隔符之间的所有内容,但正则表达式只搜索在其之前和之后i的字符。有没有办法让i(?=i)可选?

http://regexr.com?30mjf

3 个答案:

答案 0 :(得分:4)

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

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

这里r'i'可以替换为表示更复杂的正则表达式的字符串。

或者你也可以这样做:

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

通过向前瞻和后方添加交替的锚点,您现在仍然会匹配字符串开头和结尾的字符,但是某些语言不支持可变长度的外观,因此这可能无效。

如果您的语言不支持可变长度的外观,那么这是一个应该仍然有效的替代方案:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

假设输入字符串和分隔符与您正在制作它们一样简单,只需这样做,

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

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