我正在寻找一个搜索/替换正则表达式,它将捕获令牌并将其作为前缀应用于文档中的每个后续行。
所以这个..
Tokens always start with ##..
Nothing is prefixed until a token is encountered..
##CAT
furball
scratch
##DOG
egg
##MOUSE
wheel
on the stair
变为..
Tokens always start with ##..
Nothing is prefixed until a token is captured!
##CAT
CAT furball
CAT scratch
##DOG
DOG egg
#MOUSE
MOUSE wheel
MOUSE on the stair
答案 0 :(得分:2)
您可以使用此模式:
search: ((?:\A|\n)##([^\r\n]+)(?>\r?\n\2[^\r\n]+)*+\r?\n(?!##))
replace: $1$2 <= with a space at the end
但是你必须多次应用搜索替换,直到没有更多的匹配。
答案 1 :(得分:0)
据我所知,这是不可能的。我能得到的最接近的是
^##(.*)\r?\n(.*)
与
##\1\n\1 \2
输出:
Tokens always start with ##..
Nothing is prefixed until a token is encountered..
##CAT
CAT furball
scratch
##DOG
DOG egg
##MOUSE
MOUSE wheel
on the stair
答案 2 :(得分:0)
你有pcre标签和Notepad ++标签 没有回调机制,我认为你不能真正做到这一点 话虽如此,你可以在没有回调的情况下做到,但你需要划分 功能。
这是一个php示例,可能会给你一些想法
注意 - 不确定php字符串连接语法(使用'。'但它可能是'+')
用法是多行模式//m
修饰符。
^ # Begin of line
(?-s) # Modifier, No Dot-All
(?:
( # (1 start)
\#\# # Token indicator
( \w+ ) # (2), Token
.* # The rest of line
) # (1 end)
| # or,
( .* ) # (3), Just a non-token line
)
$ # End of line
# $token = "";
# $str = preg_replace_callback('/^(?-s)(?:(\#\#(\w+).*)|(.*))$/m',
# function( $matches ){
# if ( $matches[1] != "" ) {
# $token = $matches[2];
# return $matches[1];
# }
# else
# if ( $token != "" ) {
# return $token . " " . $matches[3];
# }
# return $matches[3];
# },
# $text);
#