我使用这个regex从包含许多不同文本行的文件中提取薪水:
/(£|\€|GBP)\s*?(.)*?(pro-rata|\x28pro-rata\x29)/i测试用例如下:
有关工料测绘工程图纸工资: in 36,999(按比例计算)按标准施工条件.
它符合:
但是,所有括号大小的“pro-rata”的匹配都缺少右括号,即:
£36,999 (按比例计算)
有什么不对吗??
发布于 2014-03-08 16:18:59
我试着用
/(£|\€|GBP)\s*?(.)*?(pro-rata|\(pro-rata\))/i就像我所期望的那样。
发布于 2014-03-08 16:17:53
这应该是:
/(£|\€|GBP)\s*?(.)*?(\x28pro-rata\x29|pro-rata)/i问题是,您有(.)*?,它将匹配任何字符到pro-rata,包括一个(,这意味着它匹配正则表达式(pro-rata)中的第一个术语。
注意:对于某些PHP版本,这种行为似乎有所不同(可能基于PCRE的版本进行编译)。
发布于 2014-03-08 16:26:28
我修改了一下你的模式:
\(£|\€|GBP)\s*?([0-9,]*)?\s*?(\x28pro-rata\x29|pro-rata)\i举个例子,看看为什么是这样:http://regex101.com/r/mP4hX4
https://stackoverflow.com/questions/22271708
复制相似问题