たとえば、文字列にはファーストネームが含まれていますが、正規表現だけを使用している姓は検出できませんか?Regex単語を1つしか見つけることはできません
答えて
正規表現を使用する最も簡単な方法は、単純な正規表現と論理結合を使用することです。あなただけの簡単な試合をしたいとあなたが言語をリストしていないことから、ここではPerlで基本的な実装であるので:
my $str1="firstname lastname blah blah blah";
my $str2="blurg firstname etc";
foreach($str1,$str2)
{
if(/firstname/ and !/lastname/)
{
print "$_ matched firstname and not lastname!\n";
}
else
{
print "No match for $_\n";
}
}
予想したように、出力は次のとおりです。
多くとNo match for firstname lastname blah blah blah
blurg firstname etc matched firstname and not lastname!
^(?=.*firstname)(?=.*lastname)
正規表現のバージョンでは、このようなことができます。私はあなたのファーストネームとラストネームを検索するためにゼロ幅先読みを使用しています。正規表現カーソルを "移動"しないので、両方とも最初の文字からスキャンされます。 firstnameまたはlastnameが存在しない場合、正規表現は失敗します。
真剣に、正規表現は、そうでない場合は、あなたがこのような状況を持っている可能性があり、より複雑でなければなりません:
firstname = `name`
lastname = `lastname`
lastname // ok with the given rules
と
firstname = `firstname`
lastname = `lastname`
firstnamelastname // ok with the given rules, even without the space
xfirstnamex xlastnamex // ok with the given rules
で正規表現をする必要があります:
^(.*\bfirstname\b.*\blastname\b)|(.*\blastname\b.*\bfirstname\b)
firstnameとlastnameの両方の注文をチェックし、前に単語区切りがあることを確認するそしてfirstnameとlastnameの後に。
私が示したことは、事の完全な例であることを付け加えます。はありません。あなたは正規表現を使いたいですか?あなたはそうしない!まず、あなたの言語の文字列関数を使用しようとします。次に、失敗した場合、正規表現で試すことができます。
これは '' lastname firstname "'の大文字と小文字を区別しません。 –
@JackManeyあなたが望むものを考えることはできますが、それはそれを処理します。 http://gskinner.com/RegExr/?2uvv1その他の問題があります。 – xanatos
@JackManey 'firstnamelastname'は正しいと見なされるか、firstnameが' name'で、あなたのlastnameが 'lastname'なら' lastname'はOKです( 'lastname'は' name'と 'lastname'の両方を含んでいます) – xanatos
方法について:
#!/usr/bin/perl
use Modern::Perl;
while (<DATA>) {
chomp;
say /^(?=.*\bfirstname\b)(?!.*\blastname\b)/ ? "OK : $_" : "KO : $_";
}
__DATA__
jhjg firstname jkhkjh lastname kljh
jhgj lastname kjhjk firstname kjhkjh
jhgdf firstname sjhdfg not_my_lastname
jshgdf no_my_lastname jhg firstname jkhghg
出力:これは実際には非常に簡単です
KO : jhjg firstname jkhkjh lastname kljh
KO : jhgj lastname kjhjk firstname kjhkjh
OK : jhgdf firstname sjhdfg not_my_lastname
OK : jshgdf no_my_lastname jhg firstname jkhghg
- 1. Cucumberでこのエラーを見つけることができません "マッピングが見つかりません"
- 2. ListOrderedMapを見つけることができませんか?
- 3. Javahはkhronos.opengles.GL10を見つけることができません
- 4. チームシティーコマンドラインビルドステップは、ファイルを見つけることができません
- 5. nodemonはモジュールデバッグを見つけることができません
- 6. PHPはクラスファイルを見つけることができません
- 7. Impalaはcom.mysql.jdbc.Driverを見つけることができません
- 8. NHibernateは(クラスを見つけることができません)
- 9. ProcessBuilderはファイルを見つけることができません。
- 10. Gradleはtools.jarを見つけることができません
- 11. はSystem.Windowsを見つけることができません
- 12. ジェンキンスはアーティファクトを見つけることができません
- 13. リンカーはCTFontCreateWithNameAndOptionsを見つけることができません
- 14. はMSTest.exeを見つけることができません
- 15. herokuはCSSを見つけることができません
- 16. bashスクリプトは、[^。]見つけることができません
- 17. Javaはシンボルを見つけることができません、Javaは配列内のシンボルを見つけることができませんか?
- 18. Python:win32gui.FindWindowEx()でハンドルを見つけることができません
- 19. PHPでアルゴリズムを見つけることができません
- 20. stringWithFormatでエラーを見つけることができません
- 21. MACでMACを見つけることができません
- 22. PHPでファイルを見つけることができません。
- 23. タグでフラグメントを見つけることができません
- 24. フォワードクラスでプロパティを見つけることができません
- 25. ライブラリを見つけることができません
- 26. onBindViewHolderがビューを見つけることができません
- 27. EXC_BAD_ACCESSエラーを見つけることができません
- 28. CodeIgniterモデルを見つけることができません
- 29. エラーメッセージ:PDBファイルを見つけることができません。
- 30. Omniauthがルートを見つけることができません
。この簡単なREGEXチュートリアルを読んでみると、これは非常にうまくカバーしています。 http://www.codeproject.com/KB/dotnet/regextutorial.aspx – CamelSlack
これには正規表現は必要ありません。 'str.contains(first_name)&&!str.contains(last_name)'を実行してください。 – NullUserException
正規表現を使用する言語は常に指定する必要があります。タグにも書かれています。すべての言語は正規表現を別の方法で実装しています。 – xanatos