我正在寻找一个正则表达式,可以找到其中包含6个或更少星号的行(行应该有1到6个星号,但不能更多)
例如,它应匹配整行
...this * is * an * example
它不应该匹配此行
**********this is a test ********
我确实有以下RegEx,但它不占用整行,并且对于该行只有一个星号的情况不起作用
(\*.*?\*){1,6}.*
答案 0 :(得分:1)
以下内容应该有效:
^(?!(?:[^*\r\n]*\*){7})(?=[^*\r\n]*\*).*
^
匹配行首。 注意:在常规表达式中启用多行模式,以使^
与每行的开头匹配,而不是字符串的开头。(?:[^*\r\n]*\*)
:匹配零个或多个不是星号[^*]*
或回车符\r
的字符,也不匹配换行符\n
,然后匹配星号*
。 {7,}
:匹配前7次或更多次。(?!...)
:如果之前的模式实际匹配7个或更多星星,则匹配失败。(?=[^*\r\n]*\*)
:确保该行至少包含一颗星。.*
:如果负面展望成功,则匹配整行。注意:我也更新了演示链接。
答案 1 :(得分:0)
只计算字符串中的星号。在Perl中,这将是
my $number =()= $string =~ /\*/gi;
# or...
$number = ($string =~ tr/\*//); # only works for single characters..
if ($number <= 6) {
print "Match:".$string."\n";
}
PHP有substr_count()或preg_match_all()可以完成这项工作。
答案 2 :(得分:0)
根据你的标签投票来判断我猜你正在使用R
这对于使用stringr
的{{1}} pacakge非常容易...
str_count()
使用# Your data
x <- c( "...this * is * an * example" , "**********this is a test ********" )
# Load required package
require( stringr )
# Count instances of * (note the pattern is a regex so you must escape *) and compare to condition '<= 6'
idx <- str_count( x , "\\*" ) <= 6
# [1] TRUE FALSE
# Subset data vector
x[ idx ]
#[1] "...this * is * an * example"
和gregexpr()
....
regmatches()
答案 3 :(得分:0)
以下是我写的方式:
/^[^*]*(?:\*[^*]*){1,6}$/
答案 4 :(得分:0)
试试这个,似乎有效:)
^(?=^.*\*.*$)(?!(.*\*){7,}).*$
当然它很贵:(但它是正则表达式:)。