regex - 在多行中第一次出现时结束正则表达式模式

标签 regex

<分区>

你好有这个字符串

  <20170503-18:19:09, FIXT.1.1:BANZAI->EXEC, event> (Initiated logon request)
  <20170503-18:19:09, FIX.4.4:BANZAI->EXEC, incoming> (8=FIX.4.4☺9=67☺35=A☺
  34=177☺49=EXEC☺52=20170503-18:19:09.298☺56=BANZAI☺98=0☺108=30☺10=092☺)
  <20170503-18:19:09, FIX.4.4:BANZAI->EXEC, event> 
  (Received logon) fdsfhffghgfhgjgf  177☺49=EXEC☺52=20170503-18:19:09.298☺
  56=BANZAI☺98 (Received logon) more stuff after this....

当我像这样编写我的正则表达式模式以适应多行和中间的任何字符时,我想查找在关键字“启动的登录请求”之后是否有以下响应“已收到登录”

 Initiated logon request.*[\S\s]*Received logon 

我得到字符串中最后一个关键字的所有内容 结果

  Initiated logon request)
  <20170503-18:19:09, FIX.4.4:BANZAI->EXEC, incoming> (8=FIX.4.4☺9=67☺35=A☺
  34=177☺49=EXEC☺52=20170503-18:19:09.298☺56=BANZAI☺98=0☺108=30☺10=092☺)
  <20170503-18:19:09, FIX.4.4:BANZAI->EXEC, event> 
  (Received logon) fdsfhffghgfhgjgf  177☺49=EXEC☺52=20170503-18:19:09.298☺
  56=BANZAI☺98 (Received logon

我想做的是在找到第一个关键字时停止正则表达式,

  Initiated logon request)
  <20170503-18:19:09, FIX.4.4:BANZAI->EXEC, incoming> (8=FIX.4.4☺9=67☺35=A☺
  34=177☺49=EXEC☺52=20170503-18:19:09.298☺56=BANZAI☺98=0☺108=30☺10=092☺)
  <20170503-18:19:09, FIX.4.4:BANZAI->EXEC, event> 
  (Received logon

有没有办法做到这一点谢谢你的帮助。

最佳答案

使用前瞻肯定断言 (?=...) 和非贪婪量词 *?:

Initiated logon request[\S\s]*?(?=\(Received logon\))

https://regex101.com/r/TSfjiS/3

关于regex - 在多行中第一次出现时结束正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769482/

相关文章:

php - 正则表达式工作不正常

java - 用空格分隔字符串,但在拆分数组中保留换行符

java - java中如何替换字符串?

php - 在 php 中创建正则表达式

python - 正则表达式 - 匹配返回无。我哪里错了?

javascript - 这行 Javascript Regex 的作用是什么?

C++、TR1、正则表达式和 boost

正则表达式在coldfusion中匹配整个单词串

javascript - 正则表达式将 & 转换为 &

regex - 需要正则表达式 - 没有美分的美元