我有一个文件test.txt
,其中包含以下内容:
BC@ABSC.CA
ABCabc+-._@mcmaster.io.ca
ABCabc+-._@school.image
ABCabc+-._@school3-computer.image
ABCabc+-._@school3-IT.image.tor.chrome.ca
ABCabc+-._@school3-IT.image.tor.chrome.canadannn
ABC123abc+-._@school3-IT.imageal.tor.chrome.canadannn
ABCabc+-._@school3-*IT.image.tor.chrome.ca
ABCabc+-._@school3-IT.image.tor.chrome.caskdlfj
ABCab*c+-._@school3-IT.image.tor.chrome.caABCabc
然后我用
grep -E '^[A-Za-z0-9+._-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}' test.txt
尝试匹配有效的电子邮件。 这里的关键是最后一个子域必须是2到6个字符的序列。
所以我跳到了获得以下输出:
BC@ABSC.CA
ABCabc+-._@mcmaster.io.ca
ABCabc+-._@school.image
ABCabc+-._@school3-computer.image
ABCabc+-._@school3-IT.image.tor.chrome.ca
但我 也 即使是最后一个域的长度也能获得以下内容 6个字符。
ABCabc+-._@school3-IT.image.tor.chrome.canadannn
ABC123abc+-._@school3-IT.imageal.tor.chrome.canadannn
ABCabc+-._@school3-IT.image.tor.chrome.caskdlfj
我如何解决这个问题?
答案 0 :(得分:1)
问题是grep
匹配一行中的任何内容。如果您想要完整的整行,请在末尾添加$
终止符。我们来看一个例子:
ABCabc+-._@school3-IT.image.tor.chrome.canadannn
ABCabc+-._
匹配^[A-Za-z0-9+._-]+
@
匹配@
school3-IT.image.tor.chrome.
匹配([a-zA-Z0-9-]+\.)+
。据我所知,grep
中所有量词都是贪心的。canada
匹配[a-zA-Z]{2,6}
nnn
被忽略如果没有$
,就必须有匹配的行的
答案 1 :(得分:0)
在您的正则表达式中添加一个结束线锚:gridItem: {
margin: 5,
width: Dimensions.get('window').width / 2.2, //Device width divided in almost a half
height: 150,
justifyContent: 'center',
alignItems: 'center',
},
:
$
答案 2 :(得分:-1)
您可以通过在字符串末尾添加$
来修复查询。
grep -E '^[A-Za-z0-9+._-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}$' test.txt
这是一个现场演示:https://regex101.com/r/NtZJQ0/1