Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 什么样的正则表达式可以捕获';标记到一行的末尾?_Regex - Fatal编程技术网

Regex 什么样的正则表达式可以捕获';标记到一行的末尾?

Regex 什么样的正则表达式可以捕获';标记到一行的末尾?,regex,Regex,我有一个文本文件,用一个“来表示备注 有些行有两个引号,但我需要从“的第一个实例和换行符中获取所有内容 I AL01 ' A-LINE '091398 GDK 33394178 402922 0831850 ' '091398 GDK 33394179 I AL02 ' A-

我有一个文本文件,用一个
来表示备注

有些行有两个引号,但我需要从
的第一个实例和换行符中获取所有内容

I AL01                  ' A-LINE                            '091398 GDK 33394178    
         402922 0831850 '                                   '091398 GDK 33394179    
I AL02                  ' A-LINE                            '091398 GDK 33394180    
         400722 0833118 '                                   '091398 GDK 33394181    
I A10A                  ' A-LINE 102                       '  53198 DJ  33394182    
         395335 0832203 '                                  '  53198 DJ  33394183    
I A10B                  ' A-LINE 102                       '  53198 DJ  3339418

适当的正则表达式应该是“char”,后跟任意数量的以字符串/行结束标记结尾的任何字符[包括零字符]:

'.*$
如果您想捕获“char”之后的所有内容,但不想将其包含在输出中,您可以使用:

(?<=').*$
在技术上是正确的,但更清楚的是要具体,避免以后的代码维护混淆,所以我使用$。我认为,在清晰性可能受到质疑的情况下,宣布明确的行为总比依靠隐含的行为好

'.*$
从单引号(
)开始,匹配任何字符(
)零次或多次(
*
),直到行尾(
$


我相信您需要多行选项。

这将捕获到“in backreference 1”之前的所有内容,以及“in backreference 2”之后的所有内容。根据语言(\')的不同,您可能需要避开撇号

快速修改:如果该行没有“-backreference 1,则仍应捕获整行

^ - start of string
([^']*) - capture any number of not ' characters
'? - match the ' 0 or 1 time
(.*) - capture any number of characters
$ - end of string

当我在windows(Notepad++)中尝试“.*”时,它将匹配第一行之后的所有内容,直到最后一行结束

要捕获所有内容直到该行结束,我键入以下内容:

'.*?\n

这将只捕获从“到该行末尾的所有内容。

在您的示例中,我选择以下模式:

'([^\n]+)$
使用多行和全局选项匹配所有事件

要在匹配中包含换行符,可以使用:

'[^\n]+\n
但如果没有换行符,则可能会错过最后一行

对于单行,如果不需要匹配换行符,我更喜欢使用:

'[^$]+$

我相信这一个工程,它将捕获德六边形序列在结构不良的文本多行贝娄

     Space Reservation: disabled
         Serial Number: wCVt1]IlvQWv
   Serial Number (Hex): 77435674315d496c76515776
               Comment: new comment
我对正则表达式是个十足的新手,但我会尽力解释这一点

(\w*(十六进制):w*):在字符串包含“十六进制”的行中查找文本:

(*)这是第二个捕获的文本,意味着之后的所有内容

(?=|$)创建一个限制,即=和|


因此,对于第二组,您将获得值

美元是不必要的。在正常情况下,圆点会停在线的末端。不必要,但适合他想做的事情。它后来提醒人们,它期待着从“到世界末日”的一切line@balabaster:我没有说那是错的这只是一个脚注。@Tomalak:我并不是想暗示你错了,只是想澄清我选择使用美元而不是不使用美元的原因。感谢您指出这一点。+1包括如何在所讨论的角色之后包含所有内容,而不是始终包含它。这将捕获角色的第一个实例和最后一行的结尾。这个答案是如何分解命令背后的逻辑的一个很好的示例,非常清晰!这不是问题,是吗?
'[^\n]+\n
'[^$]+$
/(\w*\(Hex\): w*)(.*?)(?= |$)/gm
     Space Reservation: disabled
         Serial Number: wCVt1]IlvQWv
   Serial Number (Hex): 77435674315d496c76515776
               Comment: new comment