如何修改正则表达式以匹配汇编代码操作数中的括号?
解决汇编操作数正则匹配括号的问题
首先得说你的原正则([$\(\),#])\w+/g的问题在哪:它只能匹配**[$(),#]这些符号紧跟字母数字下划线**的情况(比如$123、#45),但遇到像(后面跟$(不属于\w范围的字符),或者单独的括号/逗号时,就匹配不到了——这就是LDA行里的括号没被识别的核心原因。
根据汇编常见的寻址模式,我给你两个调整方向,你可以根据实际需求选:
方向1:匹配完整的操作数单元(比如整个($80,X))
如果你想把($80,X)、#$FF、$123,X这类完整的操作数作为单个匹配项,用这个正则:
(#\$?\w+|\$?\w+(?:,\w+)?|\(\$?\w+(?:,\w+)?\)|\(|\)|,)
各部分作用拆解:
#\$?\w+:匹配立即数(比如#123、#$FF)\$?\w+(?:,\w+)?:匹配直接寻址或变址寻址(比如$80、123、$80,X)\(\$?\w+(?:,\w+)?\):匹配带/不带变址的间接寻址(比如($80)、($80,X))\(|\)|,:单独匹配括号和逗号(如果需要拆分这些符号的话)
方向2:拆分匹配操作数的每个组成元素(比如(、$80、,、X、))
如果你需要把操作数里的每个元素都单独识别出来(比如括号、十六进制前缀、寄存器、逗号),用这个更简单的正则就够了:
(#|\$|\w+|\(|\)|,)
它会把所有操作数相关元素拆分开匹配,比如对LDA ($80,X),会依次匹配(、$80、,、X、),完全覆盖你需要的括号。
你可以选其中一个测试,应该就能解决括号匹配不到的问题了。
内容的提问来源于stack exchange,提问作者user9351718
相关产品推荐
相关产品推荐

