我需要创建3个正则表达式:
第一个在07之后,在BASE CAL 13 PREV SOC之后和FECHAMENTO - MODALIDADE:“BRANCO”之后取第四个值。
第二个在07之后,在BASE CAL 13 PREV SOC之后和FECHAMENTO-MODALIDADE之后获得第四个值。
第三个在07之后,在BASE CAL 13 PREV SOC之后和FECHAMENTO-MODALIDADE之后获得第四个值。
这是我创建的正则表达式,但它们错了:
1. /\sFECHAMENTO - EMPRESA MODALIDADE :\s"BRANCO".*?BASE CÁL 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s01(\s[\d,.]+){4}\s*?/
2. /\sFECHAMENTO - EMPRESA MODALIDADE :\s1.*?BASE CÁL 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s07(\s[\d,.]+){4}\s*?/
3. /\sFECHAMENTO - EMPRESA MODALIDADE :\s9.*?BASE CÁL 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s07(\s[\d,.]+){4}\s*?/
演示:
Regex MODALIDADE:“BRANCO”:http://regexr.com/3d02f工作正常,但是因为07存在,如果07不存在并且它存在于MODALIDADE:1中,则会得到错误的值。< / p>
Regex MODALIDADE:1:http://regexr.com/3d02i获得MODALIDADE 9的值。
正则表达式MODALIDADE 9:http://regexr.com/3d02l获得了正确的值,但它可能会得到错误的值,因为其他值也是如此。
问题是*?就在BASE CAL PREV 13之后,正在接受一切以找到匹配。我怎么能解决这个问题?
感谢。!!
答案 0 :(得分:0)
如果我理解你的问题,你可以:
在每个正则表达式中将.*?
更改为((?!FECHAMENTO).)*?
,这会阻止.*?
从重叠到另一个FECHAMENTO(...)
段;喜欢在:
\sFECHAMENTO - EMPRESA MODALIDADE :\s"BRANCO"((?!FECHAMENTO).)*?(BASE CÁL) 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s(07)(\s[\d,.]+){4}\s*?
...或
因为你的所有正则表达式非常相似,并且只有一个值不同 (1,9,“BRANCO”),你可以使用一个正则表达式和distingiush案例 一个值:
\sFECHAMENTO - EMPRESA MODALIDADE :\s("BRANCO"|9|1)(?:(?!FECHAMENTO).)*?BASE CÁL 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s07(?:\s([\d,.]+)){4}\s*?
只需检查组$1
捕获的值,您就会得到
相应的价值。
我认为第二种选择更好,但这取决于你。