用于匹配php';s常量定义
本文关键字:常量 定义 php 用于 | 更新日期: 2023-09-27 18:20:18
我编写了一个正则表达式来匹配php的常量定义。
示例:
define('Symfony∞DI', SYS_DIRECTORY_PUBLIC . SYS_DIRECTORY_INCLUDES . SYS_DIRECTORY_CLASSES . SYS_DIRECTORY_EXTERNAL . 'symfony/di/');
这是正则表达式:
define'(('"|'')+(['w-'.-∞]+)+('"|'')+(,)+(('s)+('"|'')+(['w-('')-''"-'.-∞-'s-('')-'/]+)+('"|'')|((['w-'s-'.-∞-('')-'/]+)))');
当我使用ActionScript执行时,它运行良好。但当我用C#执行时,它会给我以下错误:
parsing "define'(('"|'')+(['w-'.-∞]+)+('"|'')+(,)+(('s)+('"|'')+(['w-('')-''"-'.-∞-'s-('')-'/]+)+('"|'')|((['w-'s-'.-∞-('')-'/]+)))');" - Cannot include class 's in character range.
你能帮我解决这个问题吗?
您似乎在以一种完全复杂的方式使用正则表达式:
-
字符类:
-
是特殊的,它在那里计算一个区间;我想你有一个排序反转,.Net不处理它,而PHP处理它(或者PHP中的排序顺序不同)。引用第一个例子,您的字符类应该读['w.∞]
而不是['w-.-∞]
; -
不需要在
's
周围放置组:'s+
,而不是('s)+
;类似地使用,
而不是(,)
。 -
'
在正则表达式中并不特殊,如果您想匹配两个字符,请使用字符类,而不是组+替代:[''"]
而不是(''|'")
——请注意,"只有在双引号字符串中才转义; -
正则表达式没有锚定在开头,看起来您希望在输出的开头匹配
define
:^define
而不是define
。
1。可能是你问题的根源。
用以上所有内容重写正则表达式可以得到以下结果(用双引号):
"^define'((['"']['w.∞]+['"'],('s+['"']+['w''".∞'s''/]+)+['"']|(['w's.∞''/]+))');"
这看起来绝对不会匹配你的输入。。。
试试这个:
"^define'('s*([''"])['w.∞]+'1's*,'s*(['w/]+('s*'.'s*['w/]+)*'s*');$"
请参阅fge对您遇到的错误的回答。在不知道字符串要做什么并且不与原始字符串偏离太多的情况下,这里有一个替代正则表达式:
define'('s*(["'])'s*['w.∞]+'s*'1(?:'s*[.,]'s*(["']?)'s*['w/]+'s*'2)*'s*');
define
'(
's* (["'])
's* ['w.∞]+
's* '1
(?:
's* [.,]
's* (["']?)
's* ['w/]+
's* '2
)*
's*
');