在 \verb 的参数中格式化正则表达式代码

在 \verb 的参数中格式化正则表达式代码

我在格式化 参数中的正则表达式时遇到了一些困难\verb。感谢您的帮助。

\documentclass[11pt]{book}
\usepackage[paperwidth=16cm, paperheight=24cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{caption}
\usepackage{mathtools}
\usepackage{makecell}
\usepackage{tabularx}
\usepackage{ragged2e}

\newcolumntype{L}[1]{>{\RaggedRight}X} % new

\input{structure.cls} %

\begin{document}
    \begin{table}[!htp]                 % new
    \small\linespread{0.84}\selectfont  % reduce interline spaces
    \setlength\tabcolsep{4pt}           % new
    \setcellgapes{2pt}                  % new
    \makegapedcells
        \begin{tabularx}{\linewidth}{|l|L{4cm}|l|} % new
            \hline
                \bfseries{Pour trouver} & \bfseries\makecell{RegEx à utiliser} & \bfseries{Exemple} \\
            \hline
                E-mail & \verb+[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]+ & [email protected] \\
            \hline
                Numéros de sécurité sociale américains & \verb+[^[a-z]+\$]+ & 513-84-7329 \\
            \hline
                Adresses IPV4 & \verb+[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]+ & 212.23.2.110\\
            \hline
                Dates au format MM/JJ/AAAA & \verb+[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]+ & Un seul mot non vide en minuscule \\
            \hline
                Numéros de cartes Mastercard & \verb+[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]+ & Exemple \\
            \hline
                Numéros de cartes Visa & \verb+[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]+ & Exemple \\
            \hline
                Numéros de cartes American Express & \verb+[^3[47][0-9]{13}\$]+ & Exemple \\
            \hline
                Codes ZIP US & \verb+[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]+ & Exemple \\
            \hline
                Chemins d’accès à des fichiers & \verb+[\\[^\\]+\$]+\$]+ & Exemple \\
            \hline
                URL & \verb+[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]+ & Exemple
            \hline
        \end{tabularx}
        \caption{Exemples d'expressions régulières couramment utilisées}\label{tab:regexCourammentUtilisees}
    \end{table}
\end{document}

Latex 文件头

\documentclass[12pt]{book}
\usepackage[paperwidth=20cm, paperheight=29cm, margin=2cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{pifont} %Sutilise avec \usepackage{amsmath} pour la commande $\text{\ding{113}}  \Delta$
\usepackage{amsmath}
\usepackage{adjustbox}
\usepackage[activate={true,nocompatibility},final,tracking=true,kerning=true,spacing=true,factor=1100,stretch=10,shrink=10]{microtype}
\usepackage{multicol}
\usepackage{mathtools}
\usepackage{makecell}
\usepackage{tabularx}
\usepackage{listings}
\usepackage{ragged2e}

\usepackage[shortlabels]{enumitem} % Pour \begin{enumerate}a)
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{caption}
\usepackage{paracol} %Permet de diviser la page en 2 colonnes
\usepackage{titlesec} %Pour modifier le fomat du titre de section subparagraph
\usepackage{cancel} %Pour écrire chiffres barrés

\newcolumntype{L}[1]{>{\RaggedRight}X} % new
\newcolumntype{P}[1]{>{\RaggedRight}p{#1}}

\usepackage{pdflscape} % for 'landscape' env.
\usepackage{booktabs}  % for well-spaced horizontal rules
\usepackage{xurl}      % for '\path' macro, allow line breaks at arbitrary points

\titleformat*{\subparagraph}{\bfseries\itshape} %Modification du fomat du titre de section subparagraph

\definecolor{light-gray}{gray}{0.9}
\newcommand{\code}[1]{\colorbox{light-gray}{\texttt{#1}}}
\DeclareMathAlphabet\mathsf{OT1}{lcmss}{m}{n}

答案1

您不能+在以 `\verb+...+ 分隔的逐字文本中使用。作为分隔符,您必须使用未出现在逐字文本中的字符。

我认为"这不太可能出现在正则表达式中,但是由于墨菲定律,它确实出现在最后一个中!(我用过T。)

另外,您需要换行。我会制作三个大小相同的L列(顺便说一句,您的定义需要一个未使用的参数,因此我将其删除)并使用fvextra功能,请参阅代码。

当然,我还建议删除垂直规则,但请参见下面的更具吸引力的版本。

\documentclass[11pt]{book}
\usepackage[paperwidth=16cm, paperheight=24cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{caption}
\usepackage{mathtools}
\usepackage{makecell}
\usepackage{tabularx}
\usepackage{ragged2e}
\usepackage{fvextra}

\newcolumntype{L}{>{\RaggedRight}X} % new

\begin{document}

\begin{table}[!htp] % new

\linespread{0.84}
\footnotesize
\setlength\tabcolsep{4pt}   % new
\setcellgapes{2pt}  % new
\makegapedcells
\fvset{breaklines,breakanywhere,breakanywheresymbolpre={}}

\begin{tabularx}{\linewidth}{|L|L|L|} % new
\hline
\bfseries Pour trouver & \bfseries RegEx à utiliser & \bfseries Exemple \\
\hline
E-mail & \Verb"[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]" & [email protected] \\
\hline
Numéros de sécurité sociale américains & \Verb"[^[a-z]+\$]" & 513-84-7329 \\
\hline
Adresses IPV4 & \Verb"[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]" & 212.23.2.110\\
\hline
Dates au format MM/JJ/AAAA & \Verb"[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]" & Un seul mot non vide en minuscule \\
\hline
Numéros de cartes Mastercard & \Verb"[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]" & Exemple \\
\hline
Numéros de cartes Visa & \Verb"[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]" & Exemple \\
\hline
Numéros de cartes American Express & \Verb"[^3[47][0-9]{13}\$]" & Exemple \\
\hline
Codes ZIP US & \Verb"[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]" & Exemple \\
\hline
Chemins d’accès à des fichiers & \Verb"[\\[^\\]+\$]+\$]" & Exemple \\
\hline
URL & \Verb T[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]T & Exemple \\
\hline
\end{tabularx}

\caption{Exemples d'expressions régulières couramment utilisées}\label{tab:regexCourammentUtilisees}

\end{table}


\begin{table}[!htp] % new

\footnotesize\raggedright
\fvset{breaklines,breakanywhere,breakanywheresymbolpre={}}

\textbf{E-mail} \\
\Verb"[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]" \\
\texttt{[email protected]}

\medskip

\textbf{Numéros de sécurité sociale américains} \\
\Verb"[^[a-z]+\$]" \\
513-84-7329

\medskip

\textbf{Adresses IPV4} \\
\Verb"[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]" \\
212.23.2.110

\medskip

\textbf{Dates au format MM/JJ/AAAA} \\
\Verb"[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]" \\
Exemple

\medskip

\textbf{Numéros de cartes Mastercard} \\
\Verb"[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]" \\
Exemple

\medskip

\textbf{Numéros de cartes Visa} \\
\Verb"[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]" \\
Exemple

\medskip

\textbf{Numéros de cartes American Express} \\
\Verb"[^3[47][0-9]{13}\$]" \\
Exemple

\medskip

\textbf{Codes ZIP US} \\
\Verb"[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]" \\
Exemple

\medskip

\textbf{Chemins d’accès à des fichiers} \\
\Verb"[\\[^\\]+\$]+\$]" \\
Exemple

\medskip

\textbf{URL} \\
\Verb T[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]T \\
Exemple

\caption{Exemples d'expressions régulières couramment utilisées}\label{tab:regexCourammentUtilisees}

\end{table}

\end{document}

在此处输入图片描述

在此处输入图片描述

答案2

您的代码因两个不同的原因而失败。

  • 用于标记逐字字符串的开始和结束的字符绝不能发生在字符串本身中。但是,您在\verb指令 -- +-- 中使用的分隔符出现在多个字符串中。

  • \verb不允许自动换行。在 -type 列\verb内嵌入指令X无法解决这个问题。

您的代码还有另外两个严重问题:首先,除非有人有权访问文件structure.cls,否则您的代码根本无法编译。其次,由于您的tabularx环境不允许在第 1 列和第 3 列自动换行,因此您的表格根本无法放入文本块中。

该怎么办?首先,我建议您加载xurl包并\verb/.../用指令替换所有指令\path{...};这将 (a) 以等宽字体呈现字符串,并且 (b) 允许在任意点换行。其次,也允许在第 1 列和第 3 列自动换行。第三,使用横向模式呈现表格。第四,是否可以删除指令\input{structure.cls}?最后,请考虑通过删除所有垂直线和大多数水平线来使表格具有更开放的“外观”。

另外:该\path宏就像宏一样,只是在包被加载的\url情况下它不会将其参数转换为超链接。hyperref

在此处输入图片描述

\documentclass[11pt]{book}
\usepackage[paperwidth=16cm, paperheight=24cm,
            margin=2cm]{geometry} % set margins as appropriate
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{caption}
\usepackage{tabularx}
\usepackage{ragged2e}

\newcolumntype{L}{>{\RaggedRight}X}
\newcolumntype{P}[1]{>{\RaggedRight}p{#1}}
\usepackage{pdflscape} % for 'landscape' env.
\usepackage{booktabs}  % for well-spaced horizontal rules
\usepackage{xurl}      % for '\path' macro, allow line breaks at arbitrary points

%\input{structure.cls} % % huh?

\begin{document}

\begin{landscape}
\begin{table}[!htbp]     
\setlength\tabcolsep{4pt}  % default: 6pt
% 24cm - 2*2cm = 20cm = available width in landscape mode  
\begin{tabularx}{20cm}{@{} P{3.5cm} L P{3cm} @{}}
    \toprule
      \bfseries Pour trouver 
    & \bfseries RegEx à utiliser 
    & \bfseries Exemple \\
    \midrule
    E-mail 
    & \path{[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]} 
    & [email protected] \\
    \addlinespace
    Numéros de sécurité sociale américains 
    & \path{[^[a-z]+\$]} 
    & 513-84-7329 \\
    \addlinespace
    Adresses IPV4 
    & \path{[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]} 
    & 212.23.2.110\\
    \addlinespace
    Dates au format MM/JJ/AAAA 
    & \path{[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]} 
    & Un seul mot non vide en minuscule \\
    \addlinespace
    Numéros de cartes Mastercard 
    & \path{[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]} 
    & Exemple \\
    \addlinespace
    Numéros de cartes Visa 
    & \path{[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]} 
    & Exemple \\
    \addlinespace
    Numéros de cartes American Express 
    & \path{[^3[47][0-9]{13}\$]} 
    & Exemple \\
    \addlinespace
    Codes ZIP US 
    & \path{[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]} 
    & Exemple \\
    \addlinespace
    Chemins d’accès à des fichiers 
    & \path{[\\[^\\]+\$]+\$]} 
    & Exemple \\
    \addlinespace
    URL 
    & \path{[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]} 
    & Exemple \\
    \bottomrule
\end{tabularx}
\caption{Exemples d'expressions régulières couramment utilisées}
\label{tab:regexCourammentUtilisees}
\end{table}
\end{landscape}

\end{document}

答案3

使用 OpTeX 时,表格中的逐字记录没有问题:

\fontfam[lm]

\thistable{\verbchar X \def\_printinverbatim #1{\foreach#1\do{##1\hskip0ptplus1pt\relax}}}
\table pxto\hsize {|p{4cm\fL}|p{\tsize}|p{3cm\fL}|}{\crl
   \bf Pour trouver & \bf RegEx à utiliser & \bf Exemple \crl
    E-mail & X[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]X & [email protected] \crl
    Numéros de sécurité sociale américains & X[^[a-z]+\$]X & 513-84-7329 \crl
    Adresses IPV4 & X[^[\w\.=-]+@[\w\.-]+\.[\w]{2,3}\$]X & 212.23.2.110 \crl
    Dates au format MM/JJ/AAAA & X[^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}\$]X & Un seul mot non vide en minuscule \crl
    Numéros de cartes Mastercard & X[^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$]X & Exemple \crl
    Numéros de cartes Visa & X[\b([4]\d{3}[\s]\d{4}[\s]\d{4}[\s]\d{4}|[4]\d{3}[-]\d{4}[-]\d{4}[-]\d{4}|[4]\d{3}[.]\d{4}[.]\d{4}[.]\d{4}|[4]\d{3}\d{4}\d{4}\d{4})\b]X & Exemple \crl
    Numéros de cartes American Express & X[^3[47][0-9]{13}\$]X & Exemple \crl
    Codes ZIP US & X[^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))\$]X & Exemple \crl
    Chemins d’accès à des fichiers & X[\\[^\\]+\$]+\$]X & Exemple \crl
    URL & X[(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9\%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?<<>>""'']))]X & Exemple \crl
}
\bye

使用 OpTeX 中的逐字内容列编译的表格

相关内容