-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 

GS上記の両方の例で、 orの 1 つの出現を見つける単一の正規表現が必要です#(検索文字列もペイロード内にありますが)。

文字列の開始を識別するために使用できることはわかって^いますが、両方のユースケースで機能しないようです

4

3 に答える 3

0

先読みを使用して、検索語が文字の前にあることをアサートします\n

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

あなたの言語が文字列を介したアンカーなしの検索をサポートしている場合(おそらくそうです - それはどのようsedgrep動作するかなどです)、この 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

GS以下はorにマッチし#ます。#リクエストに使用している言語またはアプリがわからないため、 をエスケープしました。各プログラムとプログラミング言語には、異なるフラグと改行間の一致を備えた、わずかに異なる REGEX の実装があります。

PHP の (PCRE) スタイル:

/(GS|\#)/

典型的な正規表現ORステートメント

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