匹配 * 内的所有内容,没有空格
match everything inside of * with no whitespaces
我希望正则表达式具有以下行为:
*test and test* -> match ok
* test and test* -> match NOT ok
*test and test * -> match NOT ok
* test and test * -> match NOT ok
我正在使用这个正则表达式让它工作:\*[^\s](.*?)[^\s]\*
但问题是,在第 1 组中,它删除了第一个和最后一个字母,所以我没有匹配 test and test
,而是 est and tes
,我需要同时保留第一个和最后一个字母单词之间也有空格
那是因为[^\s]
实际匹配的是一个字符,有2个所以匹配(不是捕获)2个字符。
否定字符 class 应该在星号之后的捕获组内,并重复 1 次或多次以不匹配空字符串。
如果您也想排除匹配星号 [^\s*]
并匹配 *
中的所有内容,而不需要前导或尾随空格:
\*([^\s*]+(?:\s+[^\s*]+)*)\*
部分模式:
\*
匹配 *
(
捕获 组 1
[^\s*]+
匹配 1+ 次除空白字符或 *
以外的任何字符
(?:\s+[^\s*]+)*
可选择重复 1+ 个空格和第一个字符 class
)
关闭组 1
\*
匹配 *
你的捕获组中没有第一个和最后一个字母(用括号表示)。
试试这个:\*([^\s].*?[^\s])\*
我希望正则表达式具有以下行为:
*test and test* -> match ok
* test and test* -> match NOT ok
*test and test * -> match NOT ok
* test and test * -> match NOT ok
我正在使用这个正则表达式让它工作:\*[^\s](.*?)[^\s]\*
但问题是,在第 1 组中,它删除了第一个和最后一个字母,所以我没有匹配 test and test
,而是 est and tes
,我需要同时保留第一个和最后一个字母单词之间也有空格
那是因为[^\s]
实际匹配的是一个字符,有2个所以匹配(不是捕获)2个字符。
否定字符 class 应该在星号之后的捕获组内,并重复 1 次或多次以不匹配空字符串。
如果您也想排除匹配星号 [^\s*]
并匹配 *
中的所有内容,而不需要前导或尾随空格:
\*([^\s*]+(?:\s+[^\s*]+)*)\*
部分模式:
\*
匹配*
(
捕获 组 1[^\s*]+
匹配 1+ 次除空白字符或*
以外的任何字符
(?:\s+[^\s*]+)*
可选择重复 1+ 个空格和第一个字符 class
)
关闭组 1\*
匹配*
你的捕获组中没有第一个和最后一个字母(用括号表示)。
试试这个:\*([^\s].*?[^\s])\*