Freeze_Dolphin
如何匹配以“SAFE_”开头,并以(“BACKPACK”或“COOLER”)结尾的文字,除了“SAFE_JOURNEY_BACKPACK”以外

纱夜
本帖最后由 阴阳师元素祭祀 于 2020-7-14 19:53 编辑

可能是这样?
SAFE_.*(BACKPACK)|(COOLER)
并且不能是那种结果啊 那还是看看海螺的吧↓  (纯正则写起来我感觉会难受)


[PCD] 跟着海螺学正则
https://www.mcbbs.net/thread-827651-1-1.html
(出处: Minecraft(我的世界)中文论坛)




乱试:
菜 我 菜
在甩开grep
使用idea之后
我试出来了这个

(?>SAFE_JOURNEY_BACKPACK)?+SAFE_.*(BACKPACK)|(COOLER)

  1. (?>SAFE_JOURNEY_BACKPACK)?+SAFE_.*(BACKPACK)|(COOLER)
复制代码
(?>SAFE_JOURNEY_BACKPACK)?+SAFE_.*(BACKPACK)|(COOLER)


William_Shi
本帖最后由 William_Shi 于 2020-7-14 19:36 编辑
阴阳师元素祭祀 发表于 2020-7-14 18:51
可能是这样?
SAFE_.*(BACKPACK)|(COOLER)
并且不能是那种结果啊 那还是看看海螺的吧↓  (纯正则写起来我 ...


试试看
SAFE_(^((?!JOURNEY).))*((BACKPACK)|(COOLER))
写的可能略冗长,但应该可以用
匹配的是SAFE_开头,BackPack或Cooler结尾的字符串
而safe和结尾的backpack、cooler之间不可以有journey字符串
但是要实现你那个完全的排除,很难

纱夜
William_Shi 发表于 2020-7-14 19:35
试试看
SAFE_(^((?!JOURNEY).))*((BACKPACK)|(COOLER))
写的可能略冗长,但应该可以用

刚丢掉grep 然后使用比较方便的idea你就过来了

你给的正则不能匹配
SAFE_JOURNEY_BACKPACKSAFE_JOURNEY_BACKPACK

复杂的我没测试
当然 我的正则我也没测试复杂的X


William_Shi
阴阳师元素祭祀 发表于 2020-7-14 19:38
刚丢掉grep 然后使用比较方便的idea你就过来了

你给的正则不能匹配

是的,我说清楚了要完全一致的逆向匹配很麻烦
正则不太适合进行逆向匹配
建议直接在正则前面加一点逻辑过滤掉那个journeybackpack字符串
@Freeze_Dolphin

玄冥不倒翁
本帖最后由 602269287 于 2020-7-14 19:42 编辑

^SAFE_(?!JOURNEY).*(BACKPACK)|(COOLER)$这个我试过,可以达到你的要求

Freeze_Dolphin
William_Shi 发表于 2020-7-14 19:40
是的,我说清楚了要完全一致的逆向匹配很麻烦
正则不太适合进行逆向匹配
建议直接在正则前面加一点逻辑过 ...

其实我一开始做的时候就想到先判断SAFE_JOURNEY_BACK了,只是好奇这种怎么用regex匹配(最近在研究regex)

玄冥不倒翁
Freeze_Dolphin 发表于 2020-7-14 21:41
其实我一开始做的时候就想到先判断SAFE_JOURNEY_BACK了,只是好奇这种怎么用regex匹配(最近在研究regex ...

^SAFE_(?!JOURNEY).*(BACKPACK)|(COOLER)$
^(SAFE_(?!JOURNEY_BACKPACK).*(BACKPACK)|(COOLER))$
第一个是不能包含JOURNEY的,第二个是版主说的JOURNEY不能出现两次的解决方案~~我想哭