如何使用带有正则表达式/特殊字符的 lstlisting 包?

How to use lstlisting package with regular expressions / special chars?

我想使用 lstlisting 包在代码片段中显示带有正则表达式的 php 函数。 TeX 给了我几个错误“Package inputenc Error: Invalid UTF-8 byte sequence”并且美元符号似乎将我的 tex 代码置于数学模式。整个文档是 UTF-8 编码的。任何想法如何在 lstlisting 环境中正确处理这些特殊字符?谢谢。

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}

\begin{lstlisting}[language=php,label={lis:mylisting}]
public function passes($attribute, $value)
{
  return preg_match("/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[0-9])(?=.*?[#?!@()$%^&*=_{}[\]:;\"'|\<>,.\/~`±§+-]).{8,255}$/", $value);
}
\end{lstlisting}

问题是加减号和节号。您可以添加将它们指定为识字:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}


\begin{document}

\begin{lstlisting}[language=php,label={lis:mylisting},extendedchars=true,literate={±}{{$\pm$}}1 {§}{{\S}}1]
public function passes($attribute, $value)
{
  return preg_match("/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[0-9])(?=.*?[#?!@()$%^&*=_{}[\]:;\"'|\<>,.\/~`±§+-]).{8,255}$/", $value);
}
\end{lstlisting}
\end{document}