English 中文(简体)
在胚胎中,我如何正确使用替代物,如何在体内进行检测?
原标题:in emacs-lisp, how do I correctly use replace-regexp-in-string?

鉴于说明,我想用链接描述取代内部的所有联系。 举例说,

this is a [[http://link][description]]

我要回过来。

this is a description

我用再设计来建造这一通道,以便连接:

\[\[[^\[]+\]\[[^\[]+\]\]

这是我的职责:

(defun flatten-string-with-links (string)
    (replace-regexp-in-string "\[\[[^\[]+\]\[[^\[]+\]\]"
                (lambda(s) (nth 2 (split-string s "[][]+"))) string))

它不是取代整条reg形序列,而只是取代拖拉“]”。 这是它产生的结果:

this is a [[http://link][descriptiondescription

我不理解什么是错的。 任何帮助都会受到高度赞赏。

www.un.org/Depts/DGACM/index_spanish.htm 我已改进了该链接的监管。 它与问题无关,但如果有人用 copy子复制,他们也会得到更好的版本。

最佳回答

Your problem is that split-string is clobbering the match data, which replace-regexp-in-string is relying on being unchanged, since it is going to go use that match data to decide which sections of the string to cut out. This is arguably a doc bug in that replace-regexp-in-string does not mention that your replacement function must preserve the match data.

You can work around by using save-match-data, which is a macro provided for exactly this purpose:

(defun flatten-string-with-links (string)
    (replace-regexp-in-string "\[\[[a-zA-Z:%@/.]+\]\[[a-zA-Z:%@/.]+\]\]"
                (lambda (s) (save-match-data
                         (nth 2 (split-string s "[][]+")))) string))
问题回答

暂无回答




相关问题
Uncommon regular expressions [closed]

Recently I discovered two amazing regular expression features: ?: and ?!. I was curious of other neat regex features. So maybe you would like to share some tricky regular expressions.

regex to trap img tag, both versions

I need to remove image tags from text, so both versions of the tag: <img src="" ... ></img> <img src="" ... />

C++, Boost regex, replace value function of matched value?

Specifically, I have an array of strings called val, and want to replace all instances of "%{n}%" in the input with val[n]. More generally, I want the replace value to be a function of the match ...

PowerShell -match operator and multiple groups

I have the following log entry that I am processing in PowerShell I m trying to extract all the activity names and durations using the -match operator but I am only getting one match group back. I m ...

Is it possible to negate a regular expression search?

I m building a lexical analysis engine in c#. For the most part it is done and works quite well. One of the features of my lexer is that it allows any user to input their own regular expressions. This ...

regex for four-digit numbers (or "default")

I need a regex for four-digit numbers separated by comma ("default" can also be a value). Examples: 6755 3452,8767,9865,8766,3454 7678,9876 1234,9867,6876,9865 default Note: "default" ...

热门标签