-5

所以我有一个像这样的消息有效负载,

**GS***RL*CITGO*JJ*20090518*1036*25110*X*00405\n
ST*423*2511*RT**GS***08247

我还有另一个像这样的消息有效负载,

**#**UPT     0000SWSAM001203081454NS      /\n
GS*QM*TRSC*UPDS  *20120309*0820*0309***#***004010 

现在在上面的两个例子中,我想要一个正则表达式,它只会找到 1 次出现GSor #(即使搜索字符串也在有效负载内)

我知道我可以^用来识别字符串的开头,但它似乎不适用于我的两个用例

4

3 回答 3

0

如果您的语言支持通过字符串进行非锚定搜索(它可能支持 - 这就是 egsedgrep操作方式),只需使用与此 Python 代码等效的任何内容:

import re

payload = '''**GS***RL*CITGO*JJ*20090518*1036*25110*X*00405
ST*423*2511*RT**GS***08247'''

needle = r'GS|#'

match = re.search(needle, payload) # search() is unanchored

# index of the first matched character
print match.start() #> 2

# index of the first character after the match
print match.end() #> 4

# prints the substring the RE matched
print payload[match.start(), match.end()] #> GS 

ideone 示例:http: //ideone.com/USvlTk

于 2013-06-03T21:37:45.267 回答
0

使用前瞻断言您的搜索词位于字符之前\n

((GS)|#)(?=.*\n)
于 2013-06-03T21:18:34.657 回答
0

以下将匹配GSor #。我已经转义了#,因为我不确定您使用哪种语言或应用程序来处理您的请求。每个程序和编程语言都有一个稍微不同的 REGEX 实现,具有不同的标志和跨新行的匹配。

PHP的(PCRE)风格:

/(GS|\#)/

典型的正则OR表达式

(GS|\#)
于 2013-06-03T21:18:45.637 回答