3

これは簡単だと思いますが、たくさんのバリエーションを試しましたが、必要なものにまだ一致していません. 物事は貪欲すぎて、貪欲であることを止めることはできません.

テキストを考えると:

test=this=that=more text follows

私はただ選択したい:

test=

次の正規表現を試しました

(\S+)=(\S.*)
(\S+)?=
[^=]{1}
...

皆さんありがとう。

4

6 に答える 6

11

ここ:

// 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=停止します。複数行またはドキュメント全体の一致など、大規模な検索で効率が向上することがわかります。

于 2008-10-16T20:13:44.753 に答える
4

あなたはおそらく次のようなものが欲しい

^(\S+?=)

キャレット ^ は、正規表現を文字列の先頭に固定します。? + の後は + を非貪欲にします。

于 2008-10-16T20:15:56.343 に答える
3

怠惰な数量詞*?、 + ?、 ??、および{n、n}?を探している可能性があります。

于 2008-10-16T20:32:52.547 に答える
1

遅延量指定子は機能しますが、バックトラッキングのためにパフォーマンスが低下する可能性もあります。

あなたが本当に望んでいるのは「等しくないもの、等しいもの、そしてさらに多くの等しくないもの」であると考えてください。

([^=]+)=([^=]+)

あなたの例は[^=]{1}、単一の等しくない文字にのみ一致します。

于 2008-10-16T22:08:42.590 に答える
1

これを使用できるはずです:

(\S+?)=(\S.*)
于 2008-10-16T20:14:50.587 に答える
0

「テキスト=」のみが必要な場合は、単純に次のように考えます:

^(\w+=)

文字列「text =」が常に行を開始することを確信している場合は、問題ありません。

本当の問題は、文字列が次のような場合です。

this=that= さらに test= テキストが続きます

上記の正規表現を使用すると、結果は「this =」になり、上記を最後にリピーター修飾子で変更すると、次のようになります。

^(\w+=)*

あなたは途方もない「これ=あれ=」を見つけたので、私は些細なことしか想像できませんでした:

[th\w+=]*test=

さよなら。

于 2009-04-10T20:57:30.063 に答える