首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的表达式不能处理多行?

为什么我的表达式不能处理多行?
EN

Stack Overflow用户
提问于 2015-05-05 16:06:04
回答 1查看 53关注 0票数 1

输入

下面的代码是c++中对话框的资源声明

代码语言:javascript
复制
    LTEXT           "Width",IDC_WIDTH_TEXT,203,74,22,10
    EDITTEXT        IDC_WIDTH_IN,244,73,57,12,ES_AUTOHSCROLL | WS_GROUP
    CONTROL         "Manually scale instances and paper",IDC_RAD_PSCALE_KEYIN,
    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,89,132,10
    CONTROL         "Keep drawing instance scale 1.0",IDC_RAD_PSCALE_AUTO,
    "Button",BS_AUTORADIOBUTTON,15,104,123,10
    CONTROL         "Keep drawing paper scale 1.0",IDC_RAD_ISCALE_AUTO,
    "Button",BS_AUTORADIOBUTTON,15,119,118,10

期望输出

我想使用Visual 2010查找/替换对话框来处理该信息。

我希望从该声明中提取所有I,并有一个清除的列表,因此,在输入中,我希望得到以下输出:

代码语言:javascript
复制
IDC_WIDTH_TEXT
IDC_WIDTH_IN
IDC_RAD_PSCALE_KEYIN
IDC_RAD_PSCALE_AUTO
IDC_RAD_ISCALE_AUTO

1°尝试

如果我使用.*{IDC:i*}.*,那么我可以获得所有这些ID,但是我不会将多行部分从其中提取出来,这是如果我将\1放在替换字段中的输出:

代码语言:javascript
复制
IDC_WIDTH_TEXT
IDC_WIDTH_IN
IDC_RAD_PSCALE_KEYIN
    "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,15,89,132,10
IDC_RAD_PSCALE_AUTO
    "Button",BS_AUTORADIOBUTTON,15,104,123,10
IDC_RAD_ISCALE_AUTO
    "Button",BS_AUTORADIOBUTTON,15,119,118,10

2°尝试

如果我使用.*{IDC:i*}.*\n.*~({IDC:i*}),则会得到以下缺少IDC_WIDTH_IN的输出

代码语言:javascript
复制
IDC_WIDTH_TEXT
IDC_RAD_PSCALE_KEYIN
IDC_RAD_PSCALE_AUTO
IDC_RAD_ISCALE_AUTO

如何才能正确地获得所需的输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-05 16:34:25

在没有特定于语言/程序的dotall修饰符的情况下,除换行符外,点通常匹配所有内容。

试试这个(演示)。请注意,我的演示中的替换将\n追加到末尾,否则它也会处理新行,并将所有内容放在一行上。

代码语言:javascript
复制
^.*?(IDC\w*)[\s\S]*?(?:$|(,\n.*$))(\n|$)

解释:

代码语言:javascript
复制
 ^                  # Anchors to the beginning to the string.
 .*?                # . denotes any single character, except for newline
                      # * repeats zero or more times
                      # ? as few times as possible
 (                  # Opens CG1
     IDC            # Literal IDC
     \w*            # Token: \w (a-z, A-Z, 0-9, _)
                      # * repeats zero or more times
 )                  # Closes CG1
 [\s\S]*?           # Character class (any of the characters within)
                      # A character class and negated character class, common expression meaning any character.
 (?:                # Opens NCG
     $              # Anchors to the end to the string.
 |                  # Alternation (NCG)
     (              # Opens CG2
         ,          # Literal ,
         \n         # Token: \n (newline)
         .*         # . denotes any single character, except for newline
         $          # Anchors to the end to the string.
     )              # Closes CG2
 )                  # Closes NCG
 (                  # Opens CG3
     \n             # Token: \n (newline)
 |                  # Alternation (CG3)
     $              # Anchors to the end to the string.
 )                  # Closes CG3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30058026

复制
相关文章

相似问题

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