关于elisp正则一直有个疑问,如何精确的不匹配特定内容。
- test unmatched string
- {[test unmatched string]}
- {test unmatched string}
- [test unmatched string]
例如我想匹配 “test unmatched string” 这个字符串,但是不包含2的情形,即前后有 “{[” 和 “]}” ,除了2以外其他任何情形都可以匹配,比如 3,4 等。请问大佬们这样的 elisp 正则该如何写?
尝试过 用 “[^ ]” 这种反选,但是它只能匹配单个字符,无法匹配连在一起的字符串。貌似正则表达式的设计都是以单个字符为基准的,不知道字符串的不匹配如何表达。
如果字符串不是从第一个字符开始匹配就不行了吧?不知道楼主的本意是不是这个
不知道 elisp 是如何,一般的正则有 zero-width negative lookbehind (?<!X) 和 zero-width negative lookahead (?!X),可以用来判断前后是否符合。
1 个赞
谢谢,我想要的应该不是这个。上面的例子只是我随便列的,我想匹配的是 test unmatched string
前后不是 {[
和 ]}
的所有情形。零宽断言应该是正解。
已解决,是group编号被占用了。。
借用楼主帖子咨询个正则问题。
下面的代码为什么返回”aaa
“而不是nil
呢,如何修改让它返回nil
呢?
line
中并没有@ group
,但却返回了它的子group。
(let ((line "20241222 aaa 10.9"))
(if (string-match (concat
"^"
"\\(\\(?10:[0-3]?[0-9]*\\)\s+\\)?"
"\\(\\(?13:[\\*!]?\\)\\(?2:[a-zA-z->12]+\\)\\(/\\(?3:[a-zA-z2]+\\)\\)?\s*\\)"
"\\(@\\(?11:[a-zA-Z12]+\\)_?\\(?14:[a-zA-Z12]+\\)?\s*\\)?")
line)
(match-string 11 line)))
需要的效果是对 “20241222 aaa 10.9
” 返回nil,但对"20241222 aaa 10.9 @bbb
"返回bbb。