正则表达式:匹配“:”和“ - ”但不匹配“I-”

时间:2015-05-27 16:26:19

标签: php regex

Ohare:Montrose:I-290 Circle:IL:IL
Ohare-Montrose-I_290-Circle-IL-IL
EB:Kennedy Expy:O'Hare:IL-43 (Harlem Ave):IL:IL

NB:I-894/US-45:Hale Interchange:Zoo Interchange:WI:IL

NB
I-894 / US-45
海尔
交换
动物园交汇处
WI
IL

WB:Indiana-East-West:Eastpoint:Middlebury:IN:25:IL

WB
印第安纳东西
置邦
明德

25个
IL

尝试从使用不同约定的两个不同来源中提取单词。

使用正则表达式,我无法创建一个处理这两个选项的正则表达式。

如果我尝试使用:-进行提取,则第一个提取为

Ohare, Montrose, I, 290 Circle, IL, IL

如何在:-上分割正则表达式,但忽略I-或忽略'IL-','US-','Indiana-East-West'和还有很多我能找到的吗?

到目前为止,我没有按照自己的意愿工作 Regex

1 个答案:

答案 0 :(得分:1)

你可以使用这个负面的lookbehind正则表达式:

(?:(?:IL?|US)-|Indiana-East-West)(*SKIP)(*F)|[:-]

RegEx Demo

示例代码:

$s = 'NB:I-894/US-45:Hale Interchange:Zoo Interchange:WI:IL';
print_r(preg_split('/(?:(?:IL?|US)-|Indiana-East-West)(*SKIP)(*F)|[:-]/' , $s));
Array
(
    [0] => NB
    [1] => I-894/US-45
    [2] => Hale Interchange
    [3] => Zoo Interchange
    [4] => WI
    [5] => IL
)