次のような形式の文字列を照合しようとしています。
username=joe password='this! is a password with "quotes" and spaces#913 custom1 customd afd weirdhuh? custom1=myvalue
より詳細に説明するために、これは等号で区切られた変数のリストです。渡すことができる有効な変数は、ユーザー名、パスワード、およびcustomX(Xは任意の桁数)です。
渡された変数は技術的には有効な文字である引用符やスペースなどをいくつでも持つことができるため、私は特にパスワードフィールドを一致させようとしています。パスワード文字列がいつ終了するかを決定するために使用するのに最適な「ブレークポイント」は、次の変数が開始していることを推測する「customX =」文字列の存在であると判断しました。
したがって、上記の例では、実際のパスワードは次のようになります。
'this! is a password with "quotes" and spaces#913 custom1 customd afd weird huh?
次の正規表現に到達しました。
(?i)password(?-i)=.+?(?= (?i)custom(?-i)\d+=)
これは、次のように一致します。
password='this! is a password with "quotes" and spaces#913 custom1 customd afd weird huh?
これは事実上私が望むものです(「password =」を簡単に解析できます)が、問題は、この正規表現が文字列の最後に最後の「custom1 = myvalue」が存在する場合にのみ機能するように見えることです。それが削除された場合、一致するものはまったくありません。
その最終的な値が存在するかどうかに関係なく、パスワード文字列を一致させることができる必要があります。
「password =」を削除して、実際のパスワードのみを使用できる場合のボーナスポイント。
しかし、問題は、この正規表現が機能するように見えるのは、その最終的な「custom1 = myvalue」が存在する場合のみであるということです。
custom1=myvalue
:の代わりに、一致する文字列のオプションの終わりを追加できます。
(?i)password(?-i)=.+?((?= (?i)custom(?-i)\d+=)|$)
「password =」を削除して、実際のパスワードのみを使用できる場合のボーナスポイント。
一致する場合は後読みを使用しますpassword=
:
(?<=(?i)password(?-i)=).+?((?= (?i)custom(?-i)\d+=)|$)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加