如何标记其他编程语言的源代码?

时间:2018-04-20 23:36:45

标签: python regex parsing

我想解析一些PHP代码,我已经制作了正则表达式,它应该将PHP代码拆分为原子(https://regex101.com/r/P074q8/1),但是当我尝试执行它时,python无法像在regex101网站上那样拆分此源代码。

为什么我的正则表达式正在使用regex101.com并且不想在实际的python脚本中工作?

main.py

import re


class PHPParser:
    def __init__(self, filename):
        # read php file
        with open(filename, 'r') as f:
            self._source = f.read()

        syntax = [
            r'/\*.*?\*/',
            r'".*?"',
            r'\'.*?\'',
            r'\$[\w\d_]+', # variable name
            r'\w+', # function name
            r'return',
            r'<\?php',
            r'=>',
            r'\?>',
            r'\[',
            r'\]',
            r',',
            r';',
            r'\(',
            r'\)',
            r'\.',
            r'\n',
            r'\s',
            r'=',
            r'\W',
        ]

        s = r'(' + r'|'.join(syntax) + r')'
        print(s)
        tokens = re.split(s, self._source, re.DOTALL | re.M | re.I | re.UNICODE)

        print(tokens)


if __name__ == '__main__':
    p = PHPParser('./vendor/yiisoft/yii2/base/Widget.php')

1 个答案:

答案 0 :(得分:1)

你可以试试这个,

tokens = re.findall(s, self._source, re.DOTALL | re.M | re.I | re.UNICODE)

我只是用split()重新设置了findall()函数,因为您试图通过regex101.com same regex获取匹配字符串,但in your python脚本,通过匹配字符串尝试split