Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何将textarea标记与特定属性匹配?_Regex_Ruby - Fatal编程技术网

Regex 如何将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}} 我现在有这个正则表达式: ({{(?!#

我只想将textarea标记与某个属性匹配。假设我有这个字符串:

{{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?太棒了!我对您的解决方案进行了一点修改,以便与标记匹配:。它工作得很好!非常感谢你,爱玛!!!:)你好,艾玛。如果标签都在同一行上,如何匹配它们?我试着添加一个?而不是结尾的$,但只能匹配第一个标记。看这里:哦,又对不起了!我看这可能比我想象的要复杂。我看到正则表达式不会考虑新行:没问题!再次感谢艾玛:)