Regex 一个用于word和非wor字符的正则表达式
我有一个这样的消息负载Regex 一个用于word和非wor字符的正则表达式,regex,Regex,我有一个这样的消息负载 **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 我还收到了另一条这样的信息 **GS***RL*CITGO*JJ*20090518*1036*25110*X*00405\n
**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
我还收到了另一条这样的信息
**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
现在在上面两个例子中,我想要一个正则表达式,它只会找到一个出现的GS
或#
(即使搜索字符串也在有效负载内)
我知道我可以使用
^
来标识字符串的开头,但它似乎不适用于我的两个用例使用前瞻来断言您的搜索词位于\n
字符之前:
((GS)|#)(?=.*\n)
以下内容将与
GS
或#
匹配。我跳过了#
,因为我不确定您的请求使用的是哪种语言或应用程序。每个程序和编程语言都有一个稍微不同的REGEX实现,具有不同的标志和跨新行的匹配
PHP(PCRE)风格:
典型的正则表达式或语句
(GS|\#)
如果您的语言支持通过字符串进行无任务搜索(它可能支持,这是如何操作的,例如sed
和grep
),只需使用与此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
例如:@snipes83与/GS |#/
不一样吗?@millimoose与/GS |#/
不一样吗?@snipes83是错误的。您的RE将匹配所有内容,包括上次出现的GS
或#
:(然后再次说明,这意味着我错了,他们是一样的。)@snipes83又错了:-/foo | bar
似乎等同于/(foo)|(bar)/
。(我不确定为什么fooar
和foobar
测试用例在看起来应该失败的时候没有失败,但RE肯定没有按照您认为的方式解释。)regex的哪种风格?“查找”此事件后,您希望匹配和/或捕获什么?您能否在示例中突出显示您希望匹配的事件?在标准正则表达式中,(
和)
不是“特殊的”;\(
和\)
是。此外,在斜杠中围绕RE也不是PCRE风格——斜杠不是RE的一部分,它们是Perl、Ruby和Javascript中regexp文本周围的分隔符。(事实上,Perl和Ruby可能允许使用几种类型的分隔符。)您将它们放在PHP的模式中,因为PHP没有一流的regexp文本,但仍然希望有它们。@millimoose我经常使用代码>字符作为分隔符,我很清楚。根据他们使用的应用程序的不同,我提供了带有分隔符的答案,因此如果OP将答案放入类似preg_replace()
的内容中,他们不会得到错误PCRE
是PHP
如何引用它们的实现。我已经对大约30种不同的应用程序和10种不同的语言进行了REGEX
匹配,并且提到了一些实现如何匹配换行符,而另一些则不匹配;不是指斜杠的实施。他们甚至可能正在使用grep
。PCRE是一个特定的库,在PHP之外是可用的,我可以说它本身并不需要斜杠。这是您的两个示例之间的唯一区别,说它是一个PCRE ism(微妙地)是不准确的。@millimoose使用PHP。我用的是他们的术语。我想说的是,“PCRE库的样式”和“PHP的PCRE扩展使用的样式”(这是相当特殊的)之间有区别。你的措辞模棱两可,我只是想澄清一下,我并不是故意反对你的回答。