从后向前搜索字符串
本帖最后由 黄翔 于 2024-6-27 23:51 编辑讨论下与vl-string-search类似.但是从后向前搜索.
表示搜索的开始位置从后向前搜索,缺省值为 0。
(vl-string-search-Reverse Pattern string start-pos)
Pattern | |包含要搜索的子串
String | |在其中搜索 pattern
Start-pos | |表示搜索的开始位置从后向前搜索,缺省值为 0。
(vl-string-search-Reverse "foo" "pfooyey on foo you" 0) => 11
(vl-string-search-Reverse "foo" "pfooyey on foo you" 3) => 11
(vl-string-search-Reverse "foo" "pfooyey on foo you" 4) => 11
(vl-string-search-Reverse "foo" "pfooyey on foo you" 5) => 1
怎么写比较好.
(defun vl-string-search-Reverse (Pattern string start-pos / pos pos_lst start-posTrue x)
(setq pos_lst nil pos 0)
(while (setq pos (vl-string-search pattern string pos))
(setq pos_lst (cons pos pos_lst))
(setq pos (1+ pos))
)
(if(null start-pos)(setq start-pos 0))
(setq start-posTrue (- (strlen string) start-pos (strlen pattern) ))
(setq pos_lst (vl-remove-if '(lambda(x) (< start-posTrue x)) pos_lst))
(car pos_lst)
) 本帖最后由 自贡黄明儒 于 2024-6-28 07:43 编辑
只能从左向右搜索吧,能从后向前搜索?lisp的设计都便于掌握,不会搞得那么复杂。 从前往后搜,每次搜到了就把前面的干掉,看最后还剩的字符串长度,反算一下就知道结果了。
或者以搜索字符为分隔符分隔字符串为表,计算最后一项的字符串长度,反算。
页:
[1]