2017-08-17 10 views
-2

私は文字列biz'bazを持っています。 bizは何でもかまいませんので、bla'bazのようなものは問題ありません。文字列がbizbazになるとbizbazが返され、の前にbazがある場合は何も返されません。どのように私はこの論理で何かできますか?先読みが必要ですか? bazは、後にさらに文字を含むことがあります。単語の前に文字があるかどうかを確認する方法は?

biz'bazは一致しません。

bizbazマッチ(bizbaz)を返します。

bizbiz'bazは一致しません。

hellohi'bazhelloは一致しません。

+0

何か試しましたか? – anubhava

+0

はい、私の試行は完全に文脈から外れているので、私が試したことを投稿するのは便利ではないと思います。 – WayneXMayersX

+0

どのような正規表現のフレーバーを使用していますか?あなたは入出力の明確な例を期待できますか? –

答えて

1

/[^']baz/ 

そして、あなたは文章全体一致させたい場合は:先読みを使用して

/.*[^']baz.*/ 

Check the live example.

0

試してみてください。

\Bbaz 

\Bは "ない単語の境界" を意味します。

単語境界は、英数字([A-Za-z0-9])またはアンダースコア(歴史上の理由により文字としてカウントされる)と、これらのものではない文字互いに隣り合っている。

ので: biz'baz - 一致なし:Bの横の "単語の境界" はあります。

bizbaz - 一致:bの単語境界はありません。

bizbiz'baz - 一致なし:Bの横の「単語の境界」はあります。

hellohi'bazhello - 一致なし:Bの横の「単語の境界」はあります。

ビズ@のバズ - マッチしない:Bの横の「単語の境界」はあります。

biz_baz - 試合:アンダースコアは愚かな理由のために手紙であるため、Bの横に何の「単語の境界」は、ありません。二つのことを除いて、同じように動作し

[a-zA-Z0-9]+baz 

アンダー事項場合は、明示的にそうようなあなたが単語文字としてカウント文字を、一覧表示することができます。

1)アンダースコアは文字として扱われません。

2)マッチでは、 "baz"パートだけでなく、単語全体と一致します。あなたは、文字の否定を探している

+0

'biz @ baz'や' biz baz'とマッチしないのはなぜですか? – WayneXMayersX

+0

私はその質問を理解していません。前の文字が単語文字であることを尋ねました。 @は単語文字ではありません。 –

+0

明確にするために私の答えを更新しました。 –

1

を良い解決策です。

あなたが使用することができます。

/(?!^\p{L}*'\p{L}*(?:\s|$))(^\p{L}+)/ 

demo

をこのケースでは、意味をなすために先読みするために、関連するアンカーのいくつかのフォームを使用する必要があります。行の先頭には^を使用できますが、アンカーが必要な場合や、'の後の単語の文字が一致する場合があります。

関連する問題