文字列内の単語のインスタンスを1つだけ一致させるにはどうすればよいですか? 例として、テスト・ワードとして "fred"を使用すると、 "fredwilmawilliamjohn"という文字列の一致はTRUEになりますが、 "fredwilmawilliamfred"はFALSEにする必要がありますか?文字列内の単語のインスタンスを1つだけ見つけるにはどうすればよいですか?
答えて
リストの文脈で/g
フラグを使用して一致数を数え、それをスカラーコンテキストに変換することができます。
use strict;
use warnings;
use feature 'say';
for my $string (qw(fredwilmawilliamjohn fredwilmawilliamfred)) {
my $count =() = $string =~ m/(fred)/g;
if ($count == 1) {
say $string;
}
}
最も関連性の高い部分がリストコンテキストに試合を強制=() =
、です。 my $count
は、マッチのリストをスカラーコンテキストに強制します。スカラーコンテキストでは、リスト内の項目の数がわかります。それがあなたの試合の数です。
パターンにマッチして、それが文字列に続いて現れないことを確認したいと思うようです。否定先読みを使ってどのようにこのことについて、
m/fred(?!.*fred)/
は、それを破壊:
を?! -
が続いていません。* - ゼロ以上の文字
regexpが否定的な先読みを成功させようとするため、これは機能しません。 2番目のfredと一致しない文字列内に何かが見つかると、正規表現は成功します。 '!m/fred(?= * fred)/'はここで動作します。 –
@ChrisCharley原則は正しいですが、あなたはそれを正しく言っているわけではありません。この正規表現は最初のfredとのマッチングを避けますが、正規表現の先頭は文字列内でさらに試され、2番目のfredとマッチします(後にfredはありません) – ysth
@ysthエラー。私は正規表現がどのように機能するかを正確に見ています。 –
/fred(*COMMIT)(?!.*?fred)/s
(*COMMIT)
(5.10で追加)fred
に一致した後、バックトラックと場合には、再度の残りの部分をそれに一致しようとしていないと言います正規表現は失敗します。正規表現の残りの部分は、.*?fred
(任意の文字の後ろにfredが続きます)が、最初のfredの後、つまりそれ以上のfredがない場合、その時点で一致すると一致しません。
5.10前に、あなただけのようにのように文字列の最初のフレッドと一致するように正規表現の最初のフレッドを強制する必要があります:
は/^(?:(?!fred).)*+fred(?!.*?fred)/s
は(限りそうでないとして任意の数の文字と一致しますfredの始まりとfredとのマッチングの前に別のfredが続くことはできません)。
それとも
/^(?>.*?fred)(?!.*?fred)/s
(文字列の先頭から開始し、バックトラッキングを許可せず、最初のフレッドを見つけ、fredはそれの後に存在しないことを主張する)
(/、全体を通じてsは、.
を改行文字以外の文字にマッチさせるために使用されます)。
- 1. 文字列の辞書から単語を見つけよう
- 2. PHPは文字列内の "単語"を見つける
- 3. 文字列内の単語を見つける方法は?
- 4. 文字列内の単語の確率を見つける
- 5. SASは文字列内で大文字の単語を見つける
- 6. Rの同じデータフレーム内の別の列を持つ1つの列の単語の位置を見つけるにはどうすればよいですか?
- 7. 文字列内の文字/単語の周囲文を見つける
- 8. 文字列から3つの最長単語を見つけよう
- 9. Pythonの文字列内の単語を1つだけ残して削除
- 10. 文字列内のすべてのCR + LFを見つけるにはどうすればよいですか?
- 11. Python:空白文字なしの文字列内の単語を見つける
- 12. テキスト内の繰り返し単語のインデックスを見つけるにはどうすればよいですか?
- 13. 3つの既知の単語から文字列を見つけるには?
- 14. Pythonは2つのだけ1文字の単語
- 15. 文字列中で最長の単語を見つける
- 16. str_replace()は文字列内の文字のインスタンスを1つだけ置き換えるのはなぜですか?
- 17. 2つの別々の文字列で一致する単語を見つけるにはどうすればよいですか?
- 18. Python:文字列の最初の文字を見つけるにはどうすればいいですか?
- 19. UITextViewまたは文字列内の重複または同じ単語の範囲を見つけるにはどうすればよいですか?
- 20. .Net文字列内のすべての単語オフセットを見つける
- 21. 文字列/リスト内の単語の位置を見つける方法は?
- 22. 文字列内の単語の位置を見つける方法は?
- 23. 文字列内の2つの所定の単語の間のすべての文字を見つける
- 24. 文字列内の特定の単語を見つけてラップします
- 25. 文字列内の文字列 'NULL'はどのようにして見つけられますか?
- 26. NSMutableArrayからオブジェクトのインスタンスを1つだけ削除するにはどうすればよいですか?
- 27. IOS/Objective-C:文字列内の単語のインデックスを見つける
- 28. 文字列のインデックスを見つけて削除するにはどうすればよいですか?
- 29. アプリケーションのインスタンスを1つだけ強制実行するにはどうすればよいですか?
- 30. REGEXは文字列内の文字列を見つける
Perl_の学習で演習を行っている場合は、自分で行うべきです。 – simbabque