来自notepad ++的函数列表插件工作正常,但我的函数名称以“for / while / if”开头。
例如,我在表单类中有函数。所以他们从“形式”开始(例如form_information)。 因此函数名称不会显示在函数列表中,因为函数名称以'for'开头。
是否有人有相同的问题,或者可能是正则表达式的解决方案?
这是PHP函数列表的正则表达式和xml。
<parser id="php_function" displayName="PHP" commentExpr="((/\*.*?\*)/|(//.*?$))">
<classRange
mainExpr="^[\s]*(class|abstract[\s]+class|final[\s]+class)[\t ]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*([\s]*|[\s]*(extends|implements|(extends[\s]+(\\|[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)+[\s]+implements))[\s]+(\,[\s]*|(\\|[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*))+[\s]*)?\{"
openSymbole = "\{"
closeSymbole = "\}"
displayMode="node">
<className>
<nameExpr expr="(class|abstract[\s]+class|final[\s]+class)[\s]+[\w]+"/>
<nameExpr expr="[\s]+[\w]+\Z"/>
<nameExpr expr="[\w]+\Z"/>
</className>
<function
mainExpr="^[\s]*((static|public|protected|private|final)*(\s+(static|public|protected|private|final))+[\s]+)?(function[\s]+)+([\w]+([\s]+[\w]+)?([\s]+|\*[\s]+|[\s]+\*|[\s]+\*[\s]+))?([\w_]+[\s]*::)?(?!(if|while|for|switch))[\w_~]+[\s]*\([^\{]*\{">
<functionName>
<funcNameExpr expr="(?!(if|while|for|switch))[\w_]+[\s]*\([^\{]*"/>
<!-- comment below node if want display method with parmas -->
<funcNameExpr expr="(?!(if|while|for|switch))[\w_]+"/>
</functionName>
</function>
</classRange>
<function
mainExpr="^[\s]*function[\s]+\w+\("
displayMode="$className->$functionName">
<functionName>
<nameExpr expr="(?!(if|while|for))[\w_]+[\s]*\("/>
<nameExpr expr="(?!(if|while|for))[\w_]+"/>
</functionName>
<className>
<nameExpr expr="[\w_]+(?=[\s]*::)"/>
</className>
</function>
感谢您的时间!
答案 0 :(得分:0)
我刚刚查看了%APPDATA%\ Notepad ++ \ functionList.xml ,看起来问题是if|while|for|switch
被检查时没有字边界。您需要在适当的位置添加单词边界。请参阅修改后的第一个<function>
节点:
<function
mainExpr="^[\s]*((static|public|protected|private|final)*(\s+(static|public|protected|private|final))+[\s]+)?(function[\s]+)+([\w]+([\s]+[\w]+)?([\s]+|\*[\s]+|[\s]+\*|[\s]+\*[\s]+))?([\w_]+[\s]*::)?\b(?!(if|while|for|switch)\b)[\w_~]+[\s]*\([^\{]*\{">
<functionName>
<funcNameExpr expr="\b(?!(if|while|for|switch)\b)[\w_]+[\s]*\([^\{]*"/>
<!-- comment below node if want display method with parmas -->
<funcNameExpr expr="\b(?!(if|while|for|switch)\b)[\w_]+"/>
</functionName>
</function>
POI为\b(?!(if|while|for|switch)\b)
- 在负向前瞻之前和在交替组之后的单词边界,仅将这些单词作为整个单词匹配。
答案 1 :(得分:0)
解析器的一个问题是它测试函数名称不是if
,while
,for
或switch
。但它不会检查名称是否继续 - 例如form
。在正则表达式中添加单词边界,它可能对您有帮助。
将(?!(if|while|for|switch))
更改为
(?!(if|while|for|switch)\b)
和(?!(if|while|for))
到
(?!(if|while|for)\b)
这可能会对你有所帮助。