块的java正则表达式,而不是单行
我喜欢帝国,我是改良人工智能。但当我测试时,我发现我失去了这样一个结局“如果结束”。 AI脚本如下所示:块的java正则表达式,而不是单行,java,regex,Java,Regex,我喜欢帝国,我是改良人工智能。但当我测试时,我发现我失去了这样一个结局“如果结束”。 AI脚本如下所示: (defconst gl-current-age 1) (defconst TSA 2) ......<br/> #load-if-not-defined TURKISH-CIV<br/> (defrule<br/> (goal gl-fixed-eco-balancing NO)<br/&
(defconst gl-current-age 1)
(defconst TSA 2)
......<br/>
#load-if-not-defined TURKISH-CIV<br/>
(defrule<br/>
(goal gl-fixed-eco-balancing NO)<br/>
(up-compare-goal gl-current-age >= gv-feudal-up)<br/>
(building-type-count barracks > 0)<br/>
(or (players-unit-type-count focus-player knight-line > 6)<br/>
(players-unit-type-count focus-player boyar > 5))<br/>
(unit-type-count-total spearman-line < 20)<br/>
(timer-triggered 3)
(game-time < 2700) ;these are conditions<br/>
=><br/>
(up-modify-goal gl-food-gp-points c:+ 10)<br/>
(up-modify-goal gl-wood-gp-points c:+ 8) ;these are actions<br/>
)<br/>
#else<br/>
(defrule<br/>
(goal gl-fixed-eco-balancing NO)<br/>
(up-compare-goal gl-current-age >= gv-feudal-up)<br/>
(building-type-count stable > 0)<br/>
(or (players-unit-type-count focus-player knight-line > 6)<br/>
(players-unit-type-count focus-player boyar > 5))<br/>
(unit-type-count-total camel-line < 8)<br/>
(timer-triggered 3)<br/>
(game-time < 2700)<br/>
=><br/>
(up-modify-goal gl-food-gp-points c:+ 10)<br/>
(up-modify-goal gl-gold-gp-points c:+ 8)<br/>
)<br/>
#end-if ;it is just a trigger<br/>
(defconst gl当前年龄1)
(除常数TSA 2)
……
#如果未定义,则加载TURKISH-CIV
(定义规则
(目标gl固定生态平衡编号)
(向上比较目标gl当前年龄>=gv向上)
(建筑类型计数营房>0)
(或(玩家单位类型计数焦点玩家骑士行>6)
(玩家单位类型计数焦点玩家boyar>5))
(单位类型计数总斯皮尔曼线<20)
(定时器触发3)
(游戏时间<2700);这些是条件
=>
(向上修改目标gl食品总分c:+10)
(向上修改目标gl wood gp点c:+8);这些是行动
)
#否则
(定义规则
(目标gl固定生态平衡编号)
(向上比较目标gl当前年龄>=gv向上)
(建筑类型计数稳定>0)
(或(玩家单位类型计数焦点玩家骑士行>6)
(玩家单位类型计数焦点玩家boyar>5))
(单位类型计数总骆驼线<8)
(计时器触发3)
(比赛时间<2700)
=>
(向上修改目标gl食品总分c:+10)
(向上修改目标总帐黄金总积分c:+8)
)
#如果结束;它只是一个触发器
我已经找到了“#load…”这个没有结尾但毫无意义的词,因为它是跨模块的:这就是问题。最后我决定成对删除“(defrule”`和他的”)“它的内容并离开主框架,然后我可以比较修改后的和原始的,并找出位置
所以我想到了正则表达式,但我不能继续。我是一个编程新手,我只学习scanner,当java只读取一行时,它怎么能找到字符串(不止一行)?此外,我不确定我的表达式“(defrule.*>.*\n)”
非常感谢
这是一个AI脚本,包含三万行,但是我丢失了一个结尾,我找不到它,因为有一个跨模块的函数(不是我写的)。所以我想用java来找到它
问题1:java如何在只读取一行的情况下找到匹配的块
问题2:正则表达式“(defrule.*=>.*\n)”是否正确?(您可以看到,这些块以“(defrule”开头,以“)”、“\n”和另一个“)”结尾。与目标匹配的正则表达式是:
(?ms)\(defrule.*?^\s*\)
见a
要使用java从输入中删除这些目标,请执行以下操作:
str = str.replaceAll("(?ms)\\(defrule.*?^\\s*\\)", "");
正则表达式的要点:
是多行标志,它允许^和$匹配输入中行的开始和结束m
标志是dotall标志,它允许点匹配换行符s
- 表达式
是一个不情愿的量词,它不会跳过一节的结尾以匹配下一节的结尾*?