如何檢測一個字符串是否包含例如我的名字,但不包含僅使用正則表達式的姓氏?正則表達式查找一個單詞但不是另一個
0
A
回答
4
爲此使用正則表達式的最簡單方法是使用簡單的正則表達式和邏輯連接詞。既然你只想要簡單的比賽,因爲你沒有列出的語言,這裏是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!
1
^(?=.*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)
因此檢查名字和姓氏的兩個命令,並檢查之前是否有詞分隔符並在名字和姓氏之後。
我會補充一點,我已經展示的東西不是做完美的例子。你想用戶正則表達式?你不要!首先,您嘗試使用您的語言的字符串函數。那麼,如果他們失敗了,你可以嘗試使用正則表達式。
1
如何:
#!/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. 正則表達式來查找包含一個單詞但不是另一個的文件
- 2. 正則表達式找到一個詞
- 3. Javascript正則表達式檢查URL是否包含一個單詞並且不包含另一個單詞
- 4. 正則表達式匹配的搜索詞之一,但不是另一個
- 5. 另一個正則表達式的幫助不匹配單詞
- 6. 使用正則表達式找不到一個單詞
- 7. 正則表達式找到最後一個大寫單詞和另一個單詞之間的單詞
- 8. 正則表達式:取代一切,但不是特定單詞
- 9. 正則表達式在Java中匹配一個單詞不是
- 10. 正則表達式匹配單詞末尾,而不是一個「#」
- 11. 正則表達式匹配字符串,但不是另一個
- 12. 查找單詞的正則表達式
- 13. 正則表達式匹配一個而不是另一個
- 14. 正則表達式找出相差一個字母的單詞
- 15. 正則表達式來找到一個單詞,並用數字
- 16. 正則表達式,找到匹配後的下一個單詞
- 17. Perl正則表達式找到一個確切的單詞
- 18. 正則表達式:匹配一個單詞和一個長度
- 19. 如何找到一個正則表達式模式是另一個正則表達式的子集?
- 20. 正則表達式剝離$一個字符串,但不是另一個
- 21. 正則表達式分割一個字符串,但不是另一個
- 22. 正則表達式有另一個詞的字不包括線
- 23. 正則表達式分裂一個詞
- 24. 正則表達式排除一個詞
- 25. 正則表達式匹配找不到一個單詞,然後找到另一個
- 26. 正則表達式查找「但不是說有一」,「
- 27. 確定一個正則表達式是否是另一個
- 28. 正則表達式「包含」另一個正則表達式
- 29. 用另一個正則表達式替換正則表達式
- 30. 正則表達式從另一個正則表達式
這其實很簡單。閱讀這個簡單的REGEX教程,它很好地涵蓋了這一點。 http://www.codeproject.com/KB/dotnet/regextutorial.aspx – CamelSlack
你不需要這樣的正則表達式。只要執行'str.contains(first_name)&&!str.contains(last_name)' – NullUserException
您應該始終指定使用正則表達式的語言。它甚至寫在標籤中。每種語言都以不同的方式實現正則表達式。 – xanatos