首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >正则表达式在何种配置文件格式下不需要转义?

正则表达式在何种配置文件格式下不需要转义?
EN

Software Engineering用户
提问于 2021-09-20 07:06:27
回答 5查看 3.7K关注 0票数 13

我需要一个.NET程序的配置文件。此文件用于配置对正则表达式。正则表达式属于节的层次结构。

代码语言:javascript
运行
复制
Section1
    SubsectionA
        regular expression
        regular expression
    SubsectionB
        regular expression
        regular expression
Section2
    (etc.)

或以Markdown格式

代码语言:javascript
运行
复制
# Section1

## SubsectionA

    regular expression
    regular expression

无论如何,我想要一种配置文件格式,其中正则表达式文字不需要转义。

什么配置文件格式支持这一点?即使是YAML也需要转义。

我上面展示的两个示例--即缩进文本文件和Markdown --是可以的,但不符合标准。

EN

回答 5

Software Engineering用户

回答已采纳

发布于 2021-09-20 07:23:13

XML中的CDATA部分应该这样做。

这里有一个关于它的堆栈溢出帖子:https://stackoverflow.com/questions/2784183/what-does-cdata-in-xml-mean

我记得我花了一段时间才懂得如何使用它们。DOM解析器有用于创建CDATA部分的专用指令,但没有用于读取它们的等效语句。读取是透明的,您只需读取包含CDATA部分的元素的内容,就可以返回文字文本。

下面是我曾经做过的代码检查器的输入数据文件中的一个示例。它允许使用正则表达式定义有问题的代码片段的形式。

代码语言:javascript
运行
复制
<IssueBuster type="Basic" name="Suspicious lambdas" skip="true">
    <Description>
        <!-- See https://stackoverflow.com/questions/2465040/using-lambda-expressions-for-event-handlers -->
        A lambda expression is used for event handlers which inhibits unsubscribing.
    </Description>
    <Regex><![CDATA[\+\=\s*\([^\s\,]+\,\s*[^\s\)]+\)\s*=>]]></Regex>
    <SkipFileNames>
        <!-- If any of these inner texts appears in a file path, this buster will ignore that file. -->
        <FileName>SMMdataComponent\DeltaPlusGenerator\TestForm.cs</FileName>
        <FileName>Toolchain\Validate-TranslationEnums</FileName>
        <FileName>Tools\JcSimulator</FileName>
        <FileName>Tools\AR3toGps</FileName>
        <FileName>Tools\XMLConverter</FileName>
        <FileName>GitManipulator.cs</FileName>
    </SkipFileNames>
</IssueBuster>

请注意,CDATA采用以下形式:

代码语言:javascript
运行
复制
<![CDATA[your_literal_text]]>

无论您在内部方括号中放入什么内容,都将逐字返回。

结束这一点:在不太可能的情况下,您必须在内容中包含一个]>序列,您可以在第二个之后拆分内容]并创建两个连续的CDATA部分。这可以很容易地递归实现。

票数 16
EN

Software Engineering用户

发布于 2021-09-20 14:32:47

考虑一下TOML

它处理两种不同形式的原始字符串:

代码语言:javascript
运行
复制
regex    = '<\i\c*\s*>'

代码语言:javascript
运行
复制
regex2 = '''I [dw]on't need \d{2} apples'''
票数 10
EN

Software Engineering用户

发布于 2021-09-21 07:44:27

滚动您自己的

似乎是一种足够简单的格式;只需编写自己的自定义解析器,将纯文本文件(可能就像您的第一个示例)反序列化到对象模型中即可。这可能需要几十行代码。

您有一个简单的、特定于领域的问题要解决;为什么要用一堆通用的约束和要求来满足某种标准格式呢?它给你什么好处?您已经花费了更多的时间寻找一个现有的库,而不是仅仅编写代码所需的时间。

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/432048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档