regex - 匹配所有不以指定字符串结尾的字符

标签 regex

echo "xxabc jkl" | grep -onP  '\w+(?!abc\b)'
1:xxabc
1:jkl

为什么结果不是下面这样?

echo "xxabc jkl" | grep -onP  '\w+(?!abc\b)'
1:jkl

第一个字符串是xxabc,以abc结尾。
我想提取所有不以abc结尾的字符,为什么xxabc匹配?
如何修复它,即只获取 1:jkl 作为输出?
为什么 '\w+(?!abc\b)' 不起作用?

最佳答案

\w+(?!abc\b) pattern matches xxabc 因为\w+贪婪地匹配 1 个或多个单词字符,从而抓取 xxabc立刻。然后,负向前瞻 (?!abc\b)确保没有abc尾随字边界紧邻当前位置的左侧。自从之后xxabc没有abc如果带有尾随单词边界,则匹配成功

匹配所有不以 abc 结尾的单词使用 PCRE 正则表达式,您可以使用

echo "xxabc jkl" | grep -onP  '\b\w+\b(?<!abc)'

请参阅online demo

详细信息

  • \b - 前导词边界
  • \w+ - 1 个或多个单词字符
  • \b - 尾随单词边界
  • (?<!abc) - 如果紧邻当前位置左侧的 3 个字母是 abc,则匹配失败的负向后查找。 .

关于regex - 匹配所有不以指定字符串结尾的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45635361/

相关文章:

java - 正则表达式中使用 OR 进行分割

javascript - 在javascript中提取由两个不同短语分隔的大字符串内部的字符串

javascript - 为什么当我使用这个正则表达式时这个函数会失败?

java - string.matches (".*") 返回 false

regex - 正则表达式 : Change syntax from perl to others with grep command

c# - 查找单词的最后一次出现

regex - 给定单词列表,对文本正文进行全词匹配

javascript - 这个示例 CKEditor javascript 函数有什么作用?

java - 正则表达式是否必须是 "pattern/calculation"而不是完全匹配?

PHP:仅正则表达式字母数字和一些特殊字符