Regex 如何将textarea标记与特定属性匹配?
我只想将textarea标记与某个属性匹配。假设我有这个字符串:Regex 如何将textarea标记与特定属性匹配?,regex,ruby,Regex,Ruby,我只想将textarea标记与某个属性匹配。假设我有这个字符串: {{one}} <div>{{two}}</div> <textarea data-match-this="true">{{three}}</textarea> <textarea>{{four}}</textarea> {{five}} {{one} {{two} {{3}} {{four}} {{5}} 我现在有这个正则表达式: ({{(?!#
{{one}}
<div>{{two}}</div>
<textarea data-match-this="true">{{three}}</textarea>
<textarea>{{four}}</textarea>
{{five}}
{{one}
{{two}
{{3}}
{{four}}
{{5}}
我现在有这个正则表达式:
({{(?!#|\/).*?}})(?!<textarea>)(?!<\/textarea\>)
({(?)\124; \/).*?})(?!)(?!)
当前匹配除textarea中的标记外的所有标记。我可以使用什么正则表达式使其能够使用“data match this='true'”属性匹配textarea内的标记
这是我的问题:我只能用
数据匹配这个class='true'
来匹配textarea标签(包括有类的标签和没有内容的标签)
正则表达式:
*
。如果需要捕获内容,只需添加一些括号,如:(.*)
。若要使其仅获取包含内容的标记,请将最后一个*
更改为+
:+
我猜此表达式可能会起作用,可能需要稍加修改:
^((?=(.*?<textarea.*(data-match-this="true".*))>)|(?!(.*?<textarea.*>))).*?({{(?!#|\/).*?}}).*$
^((?=(.*?)|(?!(.*?)).*({{(?)| \/).})*$
如果您希望进一步探索或简化/修改它,请在的右上面板上进行解释。在中,您可以根据自己的喜好,逐步观察它与一些示例输入的匹配情况。您可以这样做
/“][^”][^”]*“][^”][^']*”)*?\s数据匹配此\s*=\s*(?:([''”)\s*true\s*\1))\s+(?:“[\s\s]*?”[\s\s]*?“[s\s]*?)+>([\s\s]*?)/
其中内容在第2组中。注意-搜索的属性/值的位置
是独立的,它可以位于标记中的任何位置 解释
# Begin open textarea tag
< textarea
(?= \s )
(?= # Asserttion (a pseudo atomic group)
(?: [^>"'] | " [^"]* " | ' [^']* ' )*?
\s data-match-this \s* = \s*
(?:
( ['"] ) # (1), Quote
\s* true \s* # data-match-this = true
\1
)
)
# Have the data-match-this = true,
# just match the rest of tag
\s+
(?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]? )+
> # End span tag
( [\S\s]*? ) # (2), textarea content
</textarea \s* > # Close textarea tag
#开始打开文本区域标记
"'] | " [^"]* " | ' [^']* ' )*?
\s数据与此匹配\s*=\s*
(?:
(['”)#(1),引述
\s*true\s*#数据匹配此=true
\1
)
)
#让数据与此匹配=真,
#只需匹配标签的其余部分
\s+
(?:“[\S\S]*?”|“[\S\S]*?”|[^>]?)+
>#端跨标签
([\S\S]*?)#(2),文本区内容
#关闭文本区域标记
是否存在具有不同类别的textareas?是的,可以存在具有不同类别的textareas。也许我们可以使用如下属性,而不是使用class:data match this=“true”。我将修改我的问题。好的,这是有意义的。谢谢你的澄清。(?)({.*?}})足够了吗?
或者元素中可能有更多的属性吗?哦,哎哟——试试(?)({.*?}})
?Nokogiri::HTML(HTML_变量).css('textarea[数据匹配此])
谢谢ldtcoop。谢谢你的帮助!我还试图匹配页面上文本区域标记之外的其他标记!我现在明白了。我知道该怎么做,但我只是离开了我的电脑。如果在我回到一本书的时候还没有人知道这一点,我会看看我的想法是否成功。谢谢sln的解决方案。除了{{3}之外,我还尝试匹配{1}、{2}和{5}。有办法吗?谢谢,艾玛!在第二个textarea标记中还有其他属性。如果是这样的话,有没有办法只匹配具有“数据匹配此”属性的textarea?太棒了!我对您的解决方案进行了一点修改,以便与标记匹配:。它工作得很好!非常感谢你,爱玛!!!:)你好,艾玛。如果标签都在同一行上,如何匹配它们?我试着添加一个?而不是结尾的$,但只能匹配第一个标记。看这里:哦,又对不起了!我看这可能比我想象的要复杂。我看到正则表达式不会考虑新行:没问题!再次感谢艾玛:)