正確に3回のスラッシュを含む単語を一致させる方法はほとんどありませんが、機能しません。以下に例を示します
@array = qw( abc/ab1/abc/abc a2/b1/c3/d4/ee w/5/a s/t )
foreach my $string (@array){
if ( $string =~ /^\/{3}/ ){
print " yes, word with 3 / found !\n";
print "$string\n";
}
else {
print " no word contain 3 / found\n";
}
私が試しているマクシングはほとんどありませんが、どれも動作しません
$string =~ /^\/{3}/;
$string =~ /^(\w+\/\w+\/\w+\/\w+)/;
$string =~ /^(.*\/.*\/.*\/.*)/;
他の方法でこのタイプの文字列と一致し、文字列を印刷できますか?
回答 4 件
必要なパターン(空白を追加)は
^ [^/]* / [^/]* / [^/]* / [^/]* \z
または
^ [^/]* (?: / [^/]* ){3} \z
2回目の試みは近かったが、
^
を使用した\z
なし あなたが文字列をチェックしたのでそれを作りました起動 あなたのパターンで。
ソリューション:
say for grep { m{^ [^/]* (?: / [^/]* ){3} \z}x } @array;
または
say for grep { ( () = m{/}g ) == 3 } @array;
または
say for grep { tr{/}{} == 3 } @array;
あなたは一致する必要があります
スラッシュ
いくつかの非スラッシュ(
^(?:[^\/]*
)マッチを正確に3回繰り返す
行の先頭および行のアンカーでトリプル全体を囲む:
$string =~ /^(?:[^\/]*\/[^\/]*){3}$/;
if ( $string =~ /\/.*\/.*\// and $string !~ /\/.*\/.*\/.*\// )
関連記事
- 文字列を含まないファイル内の行を検索し、その先頭にテキストを追加します
- 正規表現:自分自身を含む文字列が続く場合は文字に一致します
- 文字列(c)で - :が最後に出現した後のすべてを出力するアプリ
- 辞書には文字列または配列が含まれる場合があります
- 「_」記号を含む文字列を使用したPL/SQLの操作LIKE
- 特定のパターンの文字列を一致させるが、1つの特定のパターンを除外する方法は?
- すべての列にわたって特定の文字列を含む行をフィルタリングします(dplyrを使用)
- 文字列の終わりに一致を追加する方法を正規表現
- 文字列パターンを正規表現Pythonと照合する方法
- =と\ sの間のテキスト文字列全体を抽出するパターンの出現ごとの正規表現
グローバルに一致し、一致数を
3
と比較しますここで、
()=
operatorはコンテキストの再生であり、右側にリストコンテキストを強制しますが、左側にスカラーコンテキストが提供されるとそのリストの要素の数を返します。このような構文ストレッチに不安がある場合は、配列に割り当てます
ここで、後続の比較はスカラーコンテキストで評価します。
3つ合わせようとしています連続した
/
そして、あなたの文字列にはそれがありません。