正则表达式可能无法实现,如果没有,请解释原因,或提供链接。
最终,当/* */
评论包含doc标签(例如/** @param value description */
)时,我试图修改我的php语法文件以修复故障。即使文档标记在/* */
内是良性的,我也希望保持突出显示。
目前,phpDocTags的一个syn match
吃掉评论结束标记(* /)。
# vim syntax line
syn match phpDocTags "@\(var\)\s\+\S\+.*" containedin=phpComment
# example php code
/* @var $something 12 34*/
# vim regex match
@var $something 12 34*/
我想用phpDocTags正则表达式中的.*
替换表达式,"匹配任何不构成*/
"的字符,或者, "匹配任何非*
后跟/
的字符。"
目前我有一个使用否定前瞻的部分解决方案,但是,它遇到的问题是它与*/
之前的字符不匹配。如果空格总是在*/
之前,那么这种方法就足够了。
# vim syntax line v2
syn match phpDocTags "@\(vars\)\s\+\S\+\(.\(\*/\)\@!\)*" containedin=phpComment
# same example php code
# vim regex match v2
@var $something 12 3
因此,对于版本2,新表达式显示,"匹配任何不在*/
之前的字符。"
请注意,*/
可能位于不同的行,因此必须将其视为可选。以下是测试输入的简要列表。
INPUT EXPECTED MATCH
/* @var $something 1234*/ @var $something 1234
/* @var */ @var # but prefer no match if possible
/* @var $something 1234 @var $something 1234
/* @var $something 1 / 2 * 34*/ @var $something 1 / 2 * 34
P.S。如果有一个标志我可以添加到phpComment中,从包含的表达式中隐藏*/
,请在评论中提及。这个问题的主要焦点是正则表达式,而不是vim的语法框架。
答案 0 :(得分:2)
@var\s*\S.*\ze\*/
如果*/
“要求之后有任何内容,那么会按照@ Qeole的附加条件执行您的要求。
\ze
是标记实际匹配结束的便捷方式,同时仍为正则表达式引擎提供相关规则。
答案 1 :(得分:-1)
此正则表达式与您的目标匹配:
(?<=\/\* )@var [^*].*?(?=\*\/|$)
请参阅针对您的示例输入进行测试的live demo。
它也不像你希望的那样与空评论相匹配。
使用:
向前看不要捕捉任何东西,所以整场比赛(不是小组)是你的目标输入。