一个字符串111-=-aaa-=-bbb-=-ccc,匹配111和aaa-=-bbb-=-ccc的正则表达式是?

字符串1:111-=-aaa-=-bbb-=-ccc
字符串2:2222-=-ddd-=-eeee-=-fff-=-
问题1:我想得到匹配以第1个“-=-”分界的前后字符串的正则表达式是?即$1是"-=-"左边的数字,$2是"-=-"右面的所有字符串
问题2:那么,我想得到匹配以第2个“-=-”分界的前后字符串的正则表达式是?例如字符串2的匹配结果$1为2222-=-ddd,$2为eeee-=-fff-=-
谢谢!
我不应该将例子设成前面是数字的,应该是类似于:
sl字符jfk-=-aaa-=-b求助bb-=-ccc

vn字符bm-=-dd谢谢d-=-eeee-=-fff-=-

很高兴能回答你的问题,希望我的答案能给你一定的参考:

Q1:

^\d+(?=-=-)            # 匹配 -=- 前面的数字
(?<=-=-).*$            # 匹配 -=- 后面的字符

Q2:

^[^-=]*-=-[^-=]*(?=-=-)        # 匹配第二个 -=- 前面的字符
(?<=[^-=]*-=-[^-=]*-=-).*$    # 匹配第二个 -=- 后面的字符

测试结果:

关于最后一个正则的解释:

由于 grep 无法在断言【 (?<=) 或 (?=)】 中使用不定长度的元字符【*,+,?,{n,m}】,所以不太好测试。

我暂时还没有想出判定第二个 -=- 使用定长字符的表达方法。

追问

谢谢回答!
我不应该将例子设成前面是数字的,应该是类似于:
sl字符jfk-=-aaa-=-b求助bb-=-ccc
vn字符bm-=-dd谢谢d-=-eeee-=-fff-=-

追答

结果基本不变:

Q1:

^.*?(?=-=-)
(?<=-=-).*$

Q2:

^.*?-=-.*?(?=-=-)
(?<=.*?-=-.*?-=-).*?$


测试结果如下:


同样,由于 grep 不支持断言中包含不定长元字符,最后一个无法用 grep 得出测试结果,但可以参考测试正则表达式的工具:

温馨提示:答案为网友推荐,仅供参考