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
*表示零个或多个模式和?表示模式的零或一个匹配项。那么两者的结合*?代表什么?