usu*_* me 5 regex grep regex-lookarounds
我试图[a-zA-Z]+用一个约束提取单词:一个单词必须包含至少一个小写字母和至少一个大写字母(在单词内的任何位置).示例:如果输入hello 123 worLD,则唯一匹配应该是worLD.
我尝试使用这样的正向前瞻:
echo "hello 123 worLD" | grep -oP "(?=.*[a-z])(?=.*[A-Z])[a-zA-Z]+"
hello
Run Code Online (Sandbox Code Playgroud)
这是不正确的:唯一的匹配是hello代替worLD.然后我尝试了这个:
echo "hello 123 worLD" | grep -oP "\K((?=.*[a-z])(?=.*[A-Z])[a-zA-Z]+)"
hello
worLD
Run Code Online (Sandbox Code Playgroud)
这仍然是错误的:hello不应该匹配.
前瞻中的.*不仅检查相邻单词中的字母是否存在,而且还检查字符串中后面的字母。使用[a-zA-Z]*:
echo "hello 123 worLD" | grep -oP "\\b(?=[A-Za-z]*[a-z])(?=[A-Za-z]*[A-Z])[a-zA-Z]+"
Run Code Online (Sandbox Code Playgroud)
在线查看演示
\b我还在开头添加了一个字边界,以便仅在字边界之后执行先行检查。
| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |