|
|
1
83
错误发生的原因
在php中,正则表达式需要包含在
delimiters
. 分隔符可以是任何非字母数字、非反斜杠、非空白字符;
“” 未知修饰符x “错误通常发生在以下两种情况:
在本例中,正则表达式是
根据模式的不同,未知的修饰语投诉可能是关于
如何修复解决方法很简单。只需用任何有效的分隔符包装正则表达式模式。在这种情况下,你可以选择 ~ 得到以下信息:
如果您在使用分隔符后仍收到此错误,可能是因为模式本身包含所述分隔符的未转义出现。 或转义分隔符
如果regex模式包含如此多的分隔符,那么这是一项乏味的工作。
当然,更干净的方法是使用不同的分隔符。理想情况下,字符不会出现在regex模式的任何地方,比如
更多阅读: |
|
|
2
13
其他例子这个 reference answer 已经解释了“未知修饰符”警告的原因。这只是其他典型变体的比较。
可选regex分隔符如前所述,解决此错误的最快方法是选择一个不同的分隔符。可以使用任何非字母符号。通常首选视觉上与众不同的:
从技术上讲你可以用
散列
仅引用分隔符
偶尔你会看到
就php而言,这是完全有效的。它有时方便而不引人注目,但在ide和编辑器中并不总是清晰可见。 成对分隔符
一个有趣的变化是成对的分隔符。不必在正则表达式的两端使用相同的符号,您可以使用任何
虽然它们中的大多数也用作regex元字符,但您通常可以不费吹灰之力就使用它们。只要正则表达式中的特定大括号/paren正确配对或转义,这些变体就非常可读。 花哨的regex分隔符一个有点懒惰的技巧(这里没有背书)是使用不可打印的ascii字符作为分隔符。通过对regex字符串使用双引号和对分隔符使用八进制转义,这在php中很容易实现:
这个
很遗憾你不能使用unicode glyps
PCRE上的PHPS分隔符
这个
见 ext/pcre/php_pcre.c 关于如何预处理regex字符串:
现在这些都有些无关紧要了。但解释了分隔符警告的来源。整个过程都是为了使perl的兼容性降到最低。当然也有一些小的偏差,比如
更多参考资料
|
|
3
0
如果你想得到一个例外(
|
|
|
Mehdi Ammar · 小写字符串中方括号内的所有单词 3 年前 |
|
|
jerome · PHP删除括号内及其后的字符串 7 年前 |
|
|
Costin Nicolau · regex替换为数组 7 年前 |
|
|
WholeHearted · 记事本++正则表达式跨新行字符查找和替换 7 年前 |
|
|
IanCun · 嵌套引号内的子模式Regex匹配 8 年前 |
|
|
bohr · preg\U replace删除行的其余部分 8 年前 |
|
|
ainodoramaaa 2 · 使用strtr删除字符串 8 年前 |
|
|
502_Geek · 如果斜杠后面不包含空格,如何在斜杠后面添加空格? 8 年前 |