我在用PCRE。我需要帮助开发一个正则表达式来选择行中最后一个字符的结尾。在下面的示例中,我使用了一个XML文件的片段,我需要正则表达式来查找任何包含'target='的行(如果有的话),然后选择'>'
<wrapping target="CLIENT" source="INCD"/>
我已经尝试了下面的正则表达式,但我只得到CLIENT”source=“INCD”/我需要它来查找> if target= exisit。
(?<=target=")(.*?)(?=>)
vc9ivgsu1#
我能够用target=.+?".\K>实现我的目标
target=.+?".\K>
mefy6pfw2#
如果你正在使用java,this regex适合你:(?<=target=\".{1,255}).$困难来自于Java中lookbehind需要固定宽度的限制。解决方法是使用固定宽度范围({1,255})而不是可变宽度量词(+,*)。
(?<=target=\".{1,255}).$
{1,255}
+
*
iq3niunx3#
尝试:
/(?<=target=).*(.)$/gm
参见Regex 101上的演示
kadbb4594#
正如@jhnc在他们对您的问题的评论中所示,如果您正在使用PCRE,则不需要为此用例使用lookbehind。在表达式中描述要匹配的行,然后在要作为匹配返回的部分之前添加\K meta序列。正则表达式引擎仍然会匹配整个表达式,但会从返回的匹配中删除\K之前使用的所有字符。例如,\btarget=.*\K.(demo),如果您希望最后一个字符与'target='位于同一行,或者\btarget=[^>\n]*\K>(demo),如果您希望包含target的标记的结束'>'。如果你只想移动匹配指针而不想返回任何东西,那么把\K放在表达式的末尾。然后,引擎将立即匹配您的表达式所描述的位置:\btarget=.*\K
\K
\btarget=.*\K.
\btarget=[^>\n]*\K>
\btarget=.*\K
sf6xfgos5#
您可以使用\K来忘记到目前为止匹配的内容,然后使用\S来匹配最后一个非空格字符:
\S
\btarget=.*\K\S
Regex demo
gcxthw6b6#
要将光标放置在 > 字符之后,可以使用以下命令。
(?:(?<=target=).+?)(?<=>).?
6条答案
按热度按时间vc9ivgsu1#
我能够用
target=.+?".\K>
实现我的目标mefy6pfw2#
如果你正在使用java,this regex适合你:
(?<=target=\".{1,255}).$
困难来自于Java中lookbehind需要固定宽度的限制。解决方法是使用固定宽度范围(
{1,255}
)而不是可变宽度量词(+
,*
)。iq3niunx3#
尝试:
参见Regex 101上的演示
kadbb4594#
正如@jhnc在他们对您的问题的评论中所示,如果您正在使用PCRE,则不需要为此用例使用lookbehind。在表达式中描述要匹配的行,然后在要作为匹配返回的部分之前添加
\K
meta序列。正则表达式引擎仍然会匹配整个表达式,但会从返回的匹配中删除\K
之前使用的所有字符。例如,
\btarget=.*\K.
(demo),如果您希望最后一个字符与'target='位于同一行,或者\btarget=[^>\n]*\K>
(demo),如果您希望包含target的标记的结束'>'。如果你只想移动匹配指针而不想返回任何东西,那么把
\K
放在表达式的末尾。然后,引擎将立即匹配您的表达式所描述的位置:\btarget=.*\K
sf6xfgos5#
您可以使用
\K
来忘记到目前为止匹配的内容,然后使用\S
来匹配最后一个非空格字符:Regex demo
gcxthw6b6#
要将光标放置在 > 字符之后,可以使用以下命令。