Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
Regex 连字符后的正则表达式与数字不匹配_Regex_Hyphen - Fatal编程技术网

Regex 连字符后的正则表达式与数字不匹配

Regex 连字符后的正则表达式与数字不匹配,regex,hyphen,Regex,Hyphen,我有以下资料: 1.5 5 tablespoon cream ½ (1 cup) heavy cream ¼ – ½ teaspoon cream 1 tablespoon cream ^(?:[\-\.\/\s]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+ 我试图找出为什么¼–½不匹配,我在非捕获组中有一个转义连字符 我所尝试的: ^(?:[\-\.\/\s\W]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+但它与½(1匹配,我只想要所有东西,只要它包含点、连字符和空格

我有以下资料:

1.5 5 tablespoon cream
½ (1 cup) heavy cream
¼ – ½ teaspoon cream
1 tablespoon cream

^(?:[\-\.\/\s]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
我试图找出为什么
¼–½
不匹配,我在非捕获组中有一个转义连字符

我所尝试的:

^(?:[\-\.\/\s\W]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
但它与
½(1
匹配,我只想要所有东西,只要它包含点、连字符和空格

使用标记非单词字符的
\W
,它准确地捕获了我试图实现的内容,但是,消极的前瞻并没有阻止捕获
1(1
,以下是我尝试的:
^(?:[\-\.\/\s\W]*(?!\()*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+

文本中的“连字符”实际上是一个(十六进制2013或十进制8211),而不是一个常规连字符(十六进制2D或十进制45)

复制粘贴(因此您可以抓取en破折号)并使用:

^(?:[-–./\s]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
在字符类中同时具有常规连字符和破折号字符

请注意,character类中的所有字符都不需要转义,甚至连字符也不需要转义,因为它是第一个字符,在该位置不需要转义

如果要添加,请复制
-
并将其粘贴到字符类的末尾


如果您的工具/语言支持POSIX字符类(可能),则可以使用破折号标点类
Pd

^(?:[\p{Pd}./\s]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+

哪个更可读。

我认为有一个Unicode字符类用于破折号(短线标点符号),如果C++是一个选项:WaaaaTaTyffess!我花了一百万年甚至怀疑格林,你的答案是我的泰诺。@ BurnsBa是的,它是代码> p{Pd}。
。我已经用该选项更新了答案。感谢您提醒我它存在。但是需要转义点后的/@Bohemian@Johnson取决于您的语言。一些语言(如JS)使用斜杠来分隔正则表达式,在这种情况下,您需要转义斜杠,但实际上并非如此-斜杠在正则表达式中没有特殊意义。