xml 中带有回车 returns 的文本的正则表达式模式
Regex pattern for a text with carriage returns in xml
在 xml 文件中,我想更改内容,以便列名成为标签而不是属性。
<column name="bla">some text</column>
应该变成:
<bla>some text</bla>
我得到了这个 partialy 使用以下正则表达式:
regex: <column name="(.*)">(.*)<\/column>
substitution: <></>
但是当文本中包含回车returns时,这是不够的。添加 [\r\n]* 也只能部分帮助。对此有什么想法吗?
它应该可以解决这个问题:
<column name="bla">some text</column>
<column name="bla">some text
</column>
<column name="bla">some text
</column>
<column name="bla">some text
some text</column>
<column name="bla">some text
some text
some text</column>
成为:
<bla>some text</bla>
<bla>some text
</bla>
<bla>some text
</bla>
<bla>some text
some text</bla>
<bla>some text
some text
some text</bla>
我建议你使用 xml 解析器来完成这项工作,或者创建一个 XSLT 样式表以节省时间和将来的问题(编写你正在使用的语言来完成这项工作工作,以便我们可以向您推荐一些东西)。
无论如何,您的正则表达式不起作用,因为点 .
需要 DOTALL 修饰符 (?s)
才能匹配(newline/carriage return 也)。
<column\s+name="([^"]+)"\s*>(.*?)<\/column>
.*
之后的惰性修饰符 ?
也是必需的:如果缺少正则表达式 (.*?)
匹配从第一个开始标签 <column>
到最后一个结束标签 </column>
.
在线尝试正则表达式here
更新 - PHP
$pattern = '~(?s)<column\s+name="([^"]+)"\s*>(.*?)<\/column>~';
$text = "<column name=\"bla\">some text</column>\n<column name=\"bla\">some text\n</column>\n<column name=\"bla\">some text\n </column>\n<column name=\"bla\">some text\nsome text</column>\n<column name=\"bla\">some text\nsome text\nsome text</column>";
$result = preg_replace($pattern, "<></>", $text);
在 xml 文件中,我想更改内容,以便列名成为标签而不是属性。
<column name="bla">some text</column>
应该变成:
<bla>some text</bla>
我得到了这个 partialy 使用以下正则表达式:
regex: <column name="(.*)">(.*)<\/column>
substitution: <></>
但是当文本中包含回车returns时,这是不够的。添加 [\r\n]* 也只能部分帮助。对此有什么想法吗?
它应该可以解决这个问题:
<column name="bla">some text</column>
<column name="bla">some text
</column>
<column name="bla">some text
</column>
<column name="bla">some text
some text</column>
<column name="bla">some text
some text
some text</column>
成为:
<bla>some text</bla>
<bla>some text
</bla>
<bla>some text
</bla>
<bla>some text
some text</bla>
<bla>some text
some text
some text</bla>
我建议你使用 xml 解析器来完成这项工作,或者创建一个 XSLT 样式表以节省时间和将来的问题(编写你正在使用的语言来完成这项工作工作,以便我们可以向您推荐一些东西)。
无论如何,您的正则表达式不起作用,因为点 .
需要 DOTALL 修饰符 (?s)
才能匹配(newline/carriage return 也)。
<column\s+name="([^"]+)"\s*>(.*?)<\/column>
.*
之后的惰性修饰符 ?
也是必需的:如果缺少正则表达式 (.*?)
匹配从第一个开始标签 <column>
到最后一个结束标签 </column>
.
在线尝试正则表达式here
更新 - PHP
$pattern = '~(?s)<column\s+name="([^"]+)"\s*>(.*?)<\/column>~';
$text = "<column name=\"bla\">some text</column>\n<column name=\"bla\">some text\n</column>\n<column name=\"bla\">some text\n </column>\n<column name=\"bla\">some text\nsome text</column>\n<column name=\"bla\">some text\nsome text\nsome text</column>";
$result = preg_replace($pattern, "<></>", $text);