[英]php - split by unknown regular expression
我需要用我已知和未知的分隔符分割字符串。 例如,我知道我想用“ \\ n”,“,”和“。”分割字符串。 而且还有1个可由用户定义的sperator:例如,它可以是“;” 或“你好”或几乎任何东西。
我尝试了这个:
"[\n|,|.|".$exp."]"
...但是那没有按预期工作。 据我了解| 意味着或。 因此,此reg exp应该说用“ \\ n”或“,”或“。”分开。 或“你好”。 我认为这是因为,如果我尝试[hello],那么它会按每个字母而不是整个单词分开。 那很奇怪,因为如果我只尝试[\\ n],那么它只会被“ \\ n”分割-不会被“ \\”或“ n”分割。
有人可以向我解释一下吗? :)
当您在字符类中放置一堆字符时,如[hello]
,这将定义与一个字符匹配的标记,该字符可以是h,e,l或o。 另外, |
在字符类内部没有任何意义-它只是作为普通字符进行匹配。
正确的解决方案不是使用字符类,而是要使用普通括号:
(\\n|,|\\.|".$exp.")
顺便说一句-确保您转义$exp
任何正则表达式元字符。 基本上,这里的完整列表都需要使用反斜杠进行转义: http : //regular-expressions.info/reference.html可能有一个辅助函数可以为您完成此操作。
编辑:由于您没有使用字符类,因此我们现在需要转义\\
the .
现在是一个元字符,意思是“匹配任何东西”。 差点忘了。
\\n
实际上只是一个字符,换行( n
之前的\\
表示转义序列),因此这才起作用,而hello
无效。
此外,请记住,根据正则表达式的用途,允许任意输入正则表达式可能会带来安全风险,因此请务必小心并确保将输入清理为该正则表达式。
尝试使用此正则表达式:
preg_split('#[\n,.]|'.$exp.'#', ...);
请注意单引号,以免\\n
被换成新行。
删除[
和]
因为它们定义了字符类。 \\n
视为双引号字符串中的单个字符。 仅使用不带字符类的字符串即可按需要工作:
preg_split("/\n|,|.|$exp/", $input)
使用preg_split()
例如:
输入:
$exp = '#';
preg_split("/[,.\n$exp]/", "0\n1,2.3#4")
输出:
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4)
这是一个简单的解决方案:
"(\n|,|\.|".$exp.")"
或者您可以像这样:
"([\n,.]|".$exp.")"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.