Regex 如何在正则表达式中捕获具有非单词字符的单词
我有一个正则表达式用于捕获字符串的特定部分Regex 如何在正则表达式中捕获具有非单词字符的单词,regex,Regex,我有一个正则表达式用于捕获字符串的特定部分 [Pp]rocess[\s]+(?<proc>[\w-]*|[\/\w-]*)\([\d]*\) killed by signal (?<signame>[\w\s]*)-(?<signum>[\d]+) eg:Process tivosh(1426) killed by signal Hangup-1 请告诉我,如何捕获单词+非单词字符?该[\w\s]*仅匹配零个或多个单词或空白字符。向类中添加更多允许的字
[Pp]rocess[\s]+(?<proc>[\w-]*|[\/\w-]*)\([\d]*\) killed by signal (?<signame>[\w\s]*)-(?<signum>[\d]+)
eg:Process tivosh(1426) killed by signal Hangup-1
请告诉我,如何捕获单词+非单词字符?该
[\w\s]*
仅匹配零个或多个单词或空白字符。向类中添加更多允许的字符,或使用惰性点模式-*?
:
[Pp]rocess\s+(?<proc>.*?)\(\d*\) killed by signal (?<signame>.*?)-(?<signum>\d+)
^^^ ^^^
[Pp]进程\s+(?*?)\(\d*)被信号(?.*?-(?\d+)杀死
^^^ ^^^
见
惰性点模式将尽可能少地匹配除换行符以外的字符,直到第一个-
后跟一个或多个数字(即-(?\d+
的第一个匹配)。与(?*?)
相同-它将匹配除换行符以外的尽可能少的字符,直到第一个()
此外,用字符类(括号)包装单个速记字符类也没有意义:
[\s]*
=\s*
[\w\s]*
只匹配零个或多个单词或空白字符。向类中添加更多允许的字符,或使用惰性点模式-*?
:
[Pp]rocess\s+(?<proc>.*?)\(\d*\) killed by signal (?<signame>.*?)-(?<signum>\d+)
^^^ ^^^
[Pp]进程\s+(?*?)\(\d*)被信号(?.*?-(?\d+)杀死
^^^ ^^^
见
惰性点模式将尽可能少地匹配除换行符以外的字符,直到第一个-
后跟一个或多个数字(即-(?\d+
的第一个匹配)。与(?*?)
相同-它将匹配除换行符以外的尽可能少的字符,直到第一个()
此外,用字符类(括号)包装单个速记字符类也没有意义:
[\s]*
=\s*
这是捕获任何单词、空格和字符的方法
[\w\s\W]
这是捕获任何单词、空格、字符的方法
[\w\s\W]
将
/
添加到[\w\s]
-(?[\w\s/]*)
。或者,使用惰性点匹配*?
-将/
添加到[\w\s]
-(?[\w\s/]*)
。或者,使用惰性点匹配*?
-是否有方法接受除“*?”以外的任何非单词字符?有时这个词也可能是hello::Hai,关键是非单词与\W
匹配。您的字符类是[\w\s]
,它将任何单词char与\w
匹配。如果你写[\w\w]
它将匹配任何字符,基本上,它是
的一个DOTALL版本,匹配任何字符,包括换行符。现在,您对*?
有什么问题?我只是想知道。。。当我尝试使用[\w\w]时,我遇到了一个问题[Pp]进程[\s]+(?[\w\w-]*)([\d]*)被信号(?.*?-(?[\d]+)杀死如果输入给定的进程上载程序dfgfdg(2404)被信号跟踪/断点陷阱-5杀死进程上载程序dfgfdg(2404)被信号跟踪/断点陷阱-5杀死,那么输出进程上载程序dfgfdg(2404)被信号跟踪/断点陷阱-5进程上载程序dfgfdg signame跟踪/断点陷阱signum 5杀死如果signame可以包含-
+数字
,则需要尝试*
而不是*?
。否则,在(?\d+)
之后添加一个$
。为什么使用[\w\w-]*
?首先,-
在该类中没有任何意义,其次,*
之后必须有一个?
,以使它变懒,否则它会抓取太多。将[\w\w-]*
替换为*?
。并且不要使用[\d]
,使用\d
*表示零个或多个模式和?表示模式的零或一个匹配项。那么两者的结合*?代表什么?有没有办法接受除“*?”以外的任何非单词字符?有时这个词也可能是hello::Hai,关键是非单词与\W
匹配。您的字符类是[\w\s]
,它将任何单词char与\w
匹配。如果你写[\w\w]
它将匹配任何字符,基本上,它是
的一个DOTALL版本,匹配任何字符,包括换行符。现在,您对*?
有什么问题?我只是想知道。。。当我尝试使用[\w\w]时,我遇到了一个问题[Pp]进程[\s]+(?[\w\w-]*)([\d]*)被信号(?.*?-(?[\d]+)杀死如果输入给定的进程上载程序dfgfdg(2404)被信号跟踪/断点陷阱-5杀死进程上载程序dfgfdg(2404)被信号跟踪/断点陷阱-5杀死,那么输出进程上载程序dfgfdg(2404)被信号跟踪/断点陷阱-5进程上载程序dfgfdg signame跟踪/断点陷阱signum 5杀死如果signame可以包含-
+数字
,则需要尝试*
而不是*?
。否则,在(?\d+)
之后添加一个$
。为什么使用[\w\w-]*
?首先,-
在该类中没有任何意义,其次,*
之后必须有一个?
,以使它变懒,否则它会抓取太多。将[\w\w-]*
替换为*?
。并且不要使用[\d]
,使用\d
*表示零个或多个模式和?表示模式的零或一个匹配项。那么两者的结合*?代表什么?