【问题标题】:What is a regular expression that find a line like this: <rect **** />什么是找到这样一行的正则表达式:<rect **** />
【发布时间】:2011-03-08 16:17:26
【问题描述】:

我想要一个可用于查找以下行的正则表达式:

<rect width='10px' height ='20px'/>
<rect width='20px' height ='22px'/>
<circle radius='20px' height ='22px'/>

并用这些行替换它们:

<rect width='10px' height ='20px'></rect>
<rect width='20px' height ='22px'></rect>
<circle radius='20px' height ='22px'></circle>

谢谢。

【问题讨论】:

  • 这会实现什么,真的吗?
  • 我认为,如果您迫切需要,请使用适当的解析器读取 XML,并在告诉解析器不要使用自闭合标签后再次输出。
  • 我知道这个链接太多,但我认为在这种情况下它是合适的:stackoverflow.com/questions/1732348/…
  • @poly:我将 svg 与 "jquery svg" 一起使用,如果我写 "/>" 而不是 "",它将不起作用。我知道是一样的。但jQuery没有。 @Rossel:谢谢,这是个好主意。
  • 这是 JavaScript 还是服务器端?你用的是什么口味的?

标签: regex string string-matching


【解决方案1】:

就像 polygenelubricants 指出的那样,我不知道这会实现什么,但这应该是您正在寻找的:

<rect[^>]*/>

<circle[^>]*/>

如果你想匹配任何独立的标签,你应该看看 Crozins 解决方案。

【讨论】:

    【解决方案2】:

    您可以使用类似 #&lt;([a-z]+)([^&gt;]*)/&gt;# 的内容并替换为 &lt;$1$2&gt;&lt;/$1&gt;。但是正则表达式可能会有所不同,具体取决于您使用的正则表达式引擎。

    【讨论】:

      【解决方案3】:

      sed 's/&lt;\([a-z]*\) \([^\/&gt;]*\)\/&gt;/&lt;\1 \2&gt;&lt;\/\1&gt;/'

      会做你想做的事(在这种情况下)

      搜索模式: &lt;\([a-z]*\) \([^\/&gt;]*\)\/&gt;

      替换模式: &lt;\1 \2&gt;&lt;\/\1&gt;

      【讨论】:

        【解决方案4】:

        我不认为正则表达式是适合这项工作的工具,但这样的东西有时会“起作用”。

            String text =
                " <rect width='10px' height ='20px'/> \n" +
                " <rect width='20px' height ='22px'/> \n" +
                " <circle radius='20px' height ='22px'/> \n" +
                " <square/> <rectangle></rectangle> \n" +
                " <foo @!(*#&^#@/> <bar (!@*&(*@!#> </whatever>";
            System.out.println(
                text.replaceAll("<([a-z]+)([^>]*)/>", "<$1$2></$1>")
            );
        

        上面的Java sn -p 打印:

         <rect width='10px' height ='20px'></rect> 
         <rect width='20px' height ='22px'></rect> 
         <circle radius='20px' height ='22px'></circle> 
         <square></square> <rectangle></rectangle> 
         <foo @!(*#&^#@></foo> <bar (!@*&(*@!#> </whatever>
        

        正则表达式是这样的 (see also on rubular.com):

        /<([a-z]+)([^>]*)\/>/
        

        基本上,我们尝试在第 1 组中捕获我们希望的标记名称,以及在第 2 组中直到 /&gt; 之前的所有其他内容,并在我们的替换中使用这些捕获的字符串。

        参考文献

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-06
          • 1970-01-01
          • 2012-01-26
          • 1970-01-01
          • 2015-07-22
          • 2021-07-16
          • 2012-05-07
          • 1970-01-01
          相关资源
          最近更新 更多