Что такое регулярное выражение, которое находит такую ​​строку: <rect **** /> - PullRequest
1 голос
/ 26 июня 2010

Мне нужно регулярное выражение, которое можно использовать для поиска следующих строк:

<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>

Спасибо.

Ответы [ 4 ]

1 голос
/ 26 июня 2010

Я не думаю, что регулярное выражение является подходящим инструментом для этой работы, но что-то вроде этого будет "работать" иногда.

    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:

 <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>

Это регулярное выражение ( см. Также на rubular.com ):

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

По сути, мы пытаемся захватить, как мы надеемся, имя тега в группе 1 и все остальное до /> в группе 2, и использовать эти захваченные строки в нашей замене.

Ссылки

1 голос
/ 26 июня 2010

Вы можете использовать что-то вроде этого #<([a-z]+)([^>]*)/># и заменить на <$1$2></$1>.Но регулярное выражение может отличаться в зависимости от того, какой движок регулярного выражения вы используете.

1 голос
/ 26 июня 2010

sed 's/<\([a-z]*\) \([^\/>]*\)\/>/<\1 \2><\/\1>/'

будет делать то, что вы хотите (в данном случае)

Шаблон поиска: <\([a-z]*\) \([^\/>]*\)\/>

Заменить шаблон: <\1 \2><\/\1>

1 голос
/ 26 июня 2010

Как и отмеченные полигенные смазки, я не знаю, чего это будет достигать, но это должно быть именно то, что вы ищете:

<rect[^>]*/>

и

<circle[^>]*/>

Если вы хотите соответствовать любомуавтономный тег, который вы должны посмотреть на решение Крозина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...