Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何标记其他编程语言的源代码?_Python_Regex_Parsing - Fatal编程技术网

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

Python 如何标记其他编程语言的源代码?,python,regex,parsing,Python,Regex,Parsing,我想解析一些PHP代码,我制作了regex,它应该将PHP代码拆分为atoms(),但当我尝试执行它时,python无法像在regex101网站上那样拆分这些源代码 为什么我的正则表达式在regex101.com上工作,而不想在实际的python脚本中工作 main.py import re class PHPParser: def __init__(self, filename): # read php file with open(filename

我想解析一些PHP代码,我制作了regex,它应该将PHP代码拆分为atoms(),但当我尝试执行它时,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')
重新导入
PHPPAR类:
def uuu init uuu(self,文件名):
#读取php文件
将open(filename,'r')作为f:
self.\u source=f.read()
语法=[
r'/\*.*?\*/',
r'“.*”,
r'\'.''?'''',
r'\$[\w\d\]+',#变量名
r'\w+',#函数名
r‘返回’,
r',
r'\?>',
r'\[',
r'\]',
r',',
r';',
r'\(',
r'\)',
r'\.',
r'\n',,
r'\s',,
r'=',
r'\W',,
]
s=r'('+r'|'.join(语法)+r')'
印刷品
tokens=re.split(s,self._source,re.DOTALL | re.M | re.I | re.UNICODE)
打印(代币)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
p=PHPParser('./vendor/yiisoft/yii2/base/Widget.php')
您可以试试这个

tokens = re.findall(s, self._source, re.DOTALL | re.M | re.I | re.UNICODE)
在其中,我简单地使用
findall()
重新绘制了
split()
函数,因为您试图通过
相同的regex
regex101.com
中获取匹配字符串,但在python脚本中,您试图通过匹配字符串来
拆分