Regex 查找';单词';没有跟在某个字符后面
搜索不后跟Regex 查找';单词';没有跟在某个字符后面,regex,Regex,搜索不后跟@符号的单词字符串的正则表达式是什么 例如: mywordLLD OK myword.dff OK myword@ld Exclude (?!@)负数将使单词匹配,前提是@没有在单词之后立即出现: word(?!@) 如果在单词后面的右边某处有一个字符/字符串,则需要使匹配失败,可以使用以下三种方法中的任意一种 word(?!.*@) # Note this will require @ to be on the same
@
符号的单词字符串的正则表达式是什么
例如:
mywordLLD OK
myword.dff OK
myword@ld Exclude
(?!@)
负数将使单词
匹配,前提是@
没有在单词
之后立即出现:
word(?!@)
如果在单词
后面的右边某处有一个字符/字符串,则需要使匹配失败,可以使用以下三种方法中的任意一种
word(?!.*@) # Note this will require @ to be on the same line as word
(?s)word(?!.*@) # (except Ruby, where you need (?m)): This will check for @ anywhere...
word(?![\s\S]*@) # ... after word even if it is on the next line(s)
看
此正则表达式匹配word
子字符串,并且(?!@)
确保紧跟其后没有@
,如果有,则不会将word
作为匹配返回(即匹配失败)
发件人:
如果要匹配某个内容,而不是后跟其他内容,则必须进行消极的前瞻。在解释时,本教程解释了为什么不能使用求反字符类来匹配q
后面不跟u
的字符。负前瞻提供了解决方案:q(?!u)
。负先行结构是一对括号,左括号后跟问号和感叹号
第页:
重要的是要记住,被否定的字符类仍然必须与字符匹配q[^u]
并不意味着:“aq
后面不跟au
”。它的意思是:“一个q
后跟一个非u
字符。”。它与字符串Iraq
中的q
不匹配。它与伊拉克的q
匹配,并且q
后面的空格是一个国家。事实上:空格成为整体匹配的一部分,因为在上面的regexp中,正是“不是u
”的字符被否定的字符类匹配。如果希望正则表达式与两个字符串中的q
匹配,并且仅与q
匹配,则需要使用负前瞻:q(?!u)
word[^@]
?它涵盖了所有的例子;它不包括以word
结尾的行;为此,您需要使用word($|[^@])
。@JonathanLeffler您在这里已经有足够长的时间了,可以将答案作为答案而不是评论发布。:)无论如何,这也包括匹配中的下一个字符,因此,例如s/word[^@]/otherword/g
将不会产生与斯特里比雪夫使用前瞻的回答相同的效果。@hvd thenword@(*SKIP)(*F)word
@AvinashRaj,它看起来不错,尽管比lookaheads支持的范围稍小。不过,请再次将答案作为答案而不是评论发布。我多次看到此类问题。。。一个答案就足够了。对于R用户,请确保将perl=TRUE
添加到您的命令中,如gsub(“word(?)@)”,“”,obj,perl=TRUE)
。否则它将抛出错误“Invalid regexp”。@msbernds您救了我的命@xwhitelight您只是没有看到正确的位置,请参见。在POSIX正则表达式风格中,lookahead根本不受支持,因此除非使用-P
选项,否则不能在sed
或awk
中使用(?!…)
或(?=…)
。RE2也不支持lookaheads(因此,Go、Google Docs/Sheets REGEX*函数会受到影响)。Oracle正则表达式也不支持lookaheads。@WiktorStribiżew感谢您提供的信息