これは簡単だと思いますが、たくさんのバリエーションを試しましたが、必要なものにまだ一致していません. 物事は貪欲すぎて、貪欲であることを止めることはできません.
テキストを考えると:
test=this=that=more text follows
私はただ選択したい:
test=
次の正規表現を試しました
(\S+)=(\S.*)
(\S+)?=
[^=]{1}
...
皆さんありがとう。
これは簡単だと思いますが、たくさんのバリエーションを試しましたが、必要なものにまだ一致していません. 物事は貪欲すぎて、貪欲であることを止めることはできません.
テキストを考えると:
test=this=that=more text follows
私はただ選択したい:
test=
次の正規表現を試しました
(\S+)=(\S.*)
(\S+)?=
[^=]{1}
...
皆さんありがとう。
ここ:
// matches "test=, test"
(\S+?)=
or
// matches "test=, test" too
(\S[^=]+)=
最初のバージョンよりも 2 番目のバージョンの使用を検討する必要があります。string を指定する"test=this=that=more text follows"
と、バージョン 1 が一致test=this=that=
し、文字列の最後まで解析が続行されます。その後、バックトラックして を見つけtest=this=
、バックトラックを続け、 を見つけ、バックトラックを続け、最終的な答えとしてtest=
解決します。test=
バージョン 2 が一致するとtest=
停止します。複数行またはドキュメント全体の一致など、大規模な検索で効率が向上することがわかります。
あなたはおそらく次のようなものが欲しい
^(\S+?=)
キャレット ^ は、正規表現を文字列の先頭に固定します。? + の後は + を非貪欲にします。
怠惰な数量詞*?、 + ?、 ??、および{n、n}?を探している可能性があります。
遅延量指定子は機能しますが、バックトラッキングのためにパフォーマンスが低下する可能性もあります。
あなたが本当に望んでいるのは「等しくないもの、等しいもの、そしてさらに多くの等しくないもの」であると考えてください。
([^=]+)=([^=]+)
あなたの例は[^=]{1}
、単一の等しくない文字にのみ一致します。
これを使用できるはずです:
(\S+?)=(\S.*)
「テキスト=」のみが必要な場合は、単純に次のように考えます:
^(\w+=)
文字列「text =」が常に行を開始することを確信している場合は、問題ありません。
本当の問題は、文字列が次のような場合です。
this=that= さらに test= テキストが続きます
上記の正規表現を使用すると、結果は「this =」になり、上記を最後にリピーター修飾子で変更すると、次のようになります。
^(\w+=)*
あなたは途方もない「これ=あれ=」を見つけたので、私は些細なことしか想像できませんでした:
[th\w+=]*test=
さよなら。