Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
PHP正则表达式在括号中包含双反斜杠_Php_Regex - Fatal编程技术网

PHP正则表达式在括号中包含双反斜杠

PHP正则表达式在括号中包含双反斜杠,php,regex,Php,Regex,因此,我尝试使用一个相对简单的php正则表达式来检查字符串是否包含以下字符之一:,%$@/0123456789,但我还想检查它是否包含双反斜杠(如果它只包含一个反斜杠,我不希望它的计算结果为true),并且我不知道如何执行该操作。任何帮助都将不胜感激:) 以下是我目前正在使用的内容: preg_match('/[.,%$@\/0-9]/',$string) 我不知道如何在双反斜杠中包含“\\\\” 提前谢谢 您只是在寻找您的角色集或双反斜杠,对吗?因此: preg_match('/[.,%$@

因此,我尝试使用一个相对简单的php正则表达式来检查字符串是否包含以下字符之一:,%$@/0123456789,但我还想检查它是否包含双反斜杠(如果它只包含一个反斜杠,我不希望它的计算结果为true),并且我不知道如何执行该操作。任何帮助都将不胜感激:)

以下是我目前正在使用的内容:

preg_match('/[.,%$@\/0-9]/',$string)
我不知道如何在双反斜杠中包含“\\\\”


提前谢谢

您只是在寻找您的角色集或双反斜杠,对吗?因此:

preg_match('/[.,%$@\/0-9]|\\\\/',$string)
其中
|
表示“或”

如果字符串必须由给定的字符组成,但也必须包含一个双反斜杠,而不是一个单反斜杠,那么据我所知,您将需要3个正则表达式

if (
  (!preg_match('/[^.,%$@\/\\0-9]/', $string)) // fails if the string contains a character that is not allowed
  &&
  ! (
    preg_match('/\\/', $string) // contains at least one backslash
    &&
    !preg_match('/\\{2}/') // succeeds if the string contains a double-backslash
  )
) { /* code */ }
如果你想把所有的规则合并成一个正则表达式,你会过得很糟糕


还有一个缺点是,一旦字符串包含双反斜杠,它就可以在任何地方有额外的反斜杠,即“12\3456\78\90”是有效的。如果可能的话,,但是在输入中不允许,那么您可能需要考虑严格检查格式的正则表达式,而不是仅仅测试有效字符。

我可以补充,如果您不想在字符类中逃出<代码> /<代码>,您也可以将模式分隔符改为除“代码> > /<代码>之外的其他内容。如果字符串正好包含零个允许的字符,则此正则表达式将失败。如果存在一个允许的字符[或一个双反斜杠],则匹配成功。@Sammitch我将问题理解为“包含类中至少一个字符或至少一个“\\”实例的字符串应匹配”,但重新读取它,我不确定它是否需要至少一个类外实例和至少一个“\\”实例……OP需要澄清。OP对输入要求的定义最差为:你能给出一些通过的字符串和失败的字符串的例子吗?“123”、“\\”、“123\\”、“123abc”、“\\abc”等的预期结果是什么?