通过正则表达式查找并替换特定的参考模式(no.3)

时间:2015-05-05 18:54:25

标签: regex

我想将文本模式\nobreakword{(....)}替换为\href{http://www.bibleserver.com/text/SLT/....}{\nobreakword{(....)}},其中....代表非特定文本模式,其中包含ä,ö,ü,数字和ENTER(新行) ))

输入:

\nobreakword{(vgl. 1. Johannes 4,16)}
\nobreakword{(Daniel 4,15.17.32f.)}    
\nobreakword{(2. Könige 7,7)}
\nobreakword{(vgl. Römer 2,2)}

有时输入....在两行上用ENTER打破:

\nobreakword{(
     vgl. 2. Könige 7,7)} 
\nobreakword{(vgl. 2.
     Könige 7,7)}         

输出:

\href{http://www.bibleserver.com/text/SLT/1. Johannes 4,16}{\nobreakword{(vgl. 1. Johannes 4,16)}}
\href{http://www.bibleserver.com/text/SLT/Daniel 4,15.17.32f.}{\nobreakword{(Daniel 4,15.17.32f.)}}
\href{http://www.bibleserver.com/text/SLT/2. Könige 7,7}{\nobreakword{(vgl. 2. Könige 7,7)}}
\href{http://www.bibleserver.com/text/SLT/Römer 2,2}{\nobreakword{(vgl. Römer 2,2)}}

如果可能,我想避开网址中的vgl.

我可能必须使用一个识别以\nobreakword{(开头并以)}结尾的组。

是否可以使用https://regex101.com

此问题与旧帖相比有一些相似之处,但现在希望删除网址中的vgl.Find and replace a specific reference pattern by a regular expression (no.2)

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容进行匹配:

(\\nobreakword{\(vgl\.\s*((\d+)(?:\.\s+))?((.{3}).+?\b)[\s\S]*?([a-z0-9.,-]+)\)})

并替换为:

/\href{http://www.bibleserver.com/text/SLT/$2$4 $6}$1

请参阅DEMO

修改:如果对vgl没有限制,您可以使用:

(\\nobreakword{\((?:vgl\.)?\s*((\d+)(?:\.\s+))?((.{3}).+?\b)[\s\S]*?([a-z0-9.,-]+)\)})