2011-09-26 41 views
0

我想创建一个PHP正则表达式如果两个单词,它们之间的空间任意数量的彼此相邻的出现,将匹配未知数量的空格(”“)连续两个词。PHP正则表达式 - 寻找它们之间

例如,匹配“Daniel       Baylis”(在'Daniel'和'Baylis'之间3个空格)。我试着用这一点,但它似乎并没有工作时:

"/DANIEL[ ]{1,5}BAYLIS/" (this was to check up to 5 spaces which the most I expect in the data) 

"/DANIEL[ ]{*}BAYLIS/" 

我需要更大的文本和名称的机构内提取名称可以是文本内的任何地方出现。用户输入错误是创建多个空格的原因。

谢谢大家! - 丹

+0

你也可以只是先替换过时的空格,然后匹配它,这应该更容易;) – Kenny

+0

'DANIEL [] {1,5} BAYLIS “这看起来不错,为什么不工作? – Kent

+0

@Kent我猜的情况是问题...,我实际使用) – Romain

回答

3

/DANIEL[ ]+BAYLIS/应该这样做... +将会glob的一个或多个发生在前面的字符(-class),在这种情况下,litteral空间。

另外,假设你想匹配无论大小写,你需要调整你的正则表达式是不区分大小写的,我不知道如何在PHP中做(这取决于你的正则表达式的味道使用...很长一段时间,因为我最后一次碰到...)

+3

这就是'/ i'修饰符。在这里使用单词边界也是一个好主意,当然括号也不是必需的。 '/ \ bDANIEL + BAYLIS \ b/i'应该这样做。 –

+0

@TimPietzcker我思考了'/ i',但是从我的头顶有一个'pregi_'命名空间中的一套在PHP中的方法有效地处理不区分大小写的正则表达式,而不必添加'/ i'。 ..但是,我已经说过了......只是为了清晰起见,方括号只是在那里。并且字边界确实很好,但问题声明并不要求他们根据我的理解:) – Romain

+0

感谢罗曼和蒂姆 - 那个工作完美! – Dan