C# 正则表达式有问题,在特殊字符出现之前,如何使用\S获取所有内容?
我收到了文本:C# 正则表达式有问题,在特殊字符出现之前,如何使用\S获取所有内容?,c#,asp.net,regex,C#,Asp.net,Regex,我收到了文本: 192.168.20.31 Url=/flash/56553550_hi.mp4?token=(uniquePlayerReference=81781956||videoId=1) 我正试图获得uniquePlayerReference和videoId 我试过这个正则表达式: (?<=uniquePlayerReference=)\S* 然后我试着用这个来获取视频id: (?<=videoId=)\S* (?鉴于两个id都是数字,您最好使用\d而不是\s\d只
192.168.20.31 Url=/flash/56553550_hi.mp4?token=(uniquePlayerReference=81781956||videoId=1)
我正试图获得uniquePlayerReference和videoId
我试过这个正则表达式:
(?<=uniquePlayerReference=)\S*
然后我试着用这个来获取视频id:
(?<=videoId=)\S*
(?鉴于两个id都是数字,您最好使用\d
而不是\s
\d
只匹配数字,而\s
匹配任何非空白字符
您还可以进行非格雷迪匹配,直到您不想匹配的角色,如下所示:
uniquePlayerReference=(.*?)\|\|videoId=(.*?)\)
请注意,我对|
和)
字符都进行了转义,因为否则它们在正则表达式中会有特殊的含义
在C#中,您可以这样使用:(这也回答了您的问题,括号是用来表示什么的,它们是用来表示匹配结果的一部分)
鉴于两个id都是数字,您最好使用\d
而不是\s
<代码>\d
仅匹配数字,而\S
匹配任何非空白字符
您还可以进行非格雷迪匹配,直到您不想匹配的角色,如下所示:
uniquePlayerReference=(.*?)\|\|videoId=(.*?)\)
请注意,我对|
和)
字符都进行了转义,因为否则它们在正则表达式中会有特殊的含义
在C#中,您可以这样使用:(这也回答了您的问题,括号是用来表示什么的,它们是用来表示匹配结果的一部分)
问题在于mul;这里有一个tiplicity操作符-
*
,意思是“尽可能多”。如果您有一个明确的数字,您可以使用操作符{a,b}
,其中a是匹配的最小值,b是匹配的最大值,但是如果您有一个未知的数字,您不能使用\S(这太通用了)
至于方括号,如果您的意思是()
,则可以使用它们捕获匹配的一部分以进行反向引用。有点复杂,我想你需要用一个
我想你想要这样的东西:
/uniquePlayerReference=(\d+)||videoId=(\d+)/i
videoId=(\S+)\)
然后分别反向引用\1和\2。问题在于mul;这里有一个tiplicity操作符-
*
,意思是“尽可能多”。如果您有一个明确的数字,您可以使用操作符{a,b}
,其中a是匹配的最小值,b是匹配的最大值,但是如果您有一个未知的数字,您不能使用\S(这太通用了)
至于方括号,如果您的意思是()
,则可以使用它们捕获匹配的一部分以进行反向引用。有点复杂,我想你需要用一个
我想你想要这样的东西:
/uniquePlayerReference=(\d+)||videoId=(\d+)/i
videoId=(\S+)\)
然后分别反向引用\1和\2。S表示它匹配任何非空白字符,包括右括号。因此,如果必须使用\S,则必须在右括号处显式地说stop,如下所示:
/uniquePlayerReference=(\d+)||videoId=(\d+)/i
videoId=(\S+)\)
因此,最好使用\d,因为您要查找的是数字:
uniquePlayerReference=(\d+)
videoId=(\d+)
\S表示它匹配任何非空白字符,包括右括号。因此,如果必须使用\S,则必须在右括号处显式地说stop,如下所示:
/uniquePlayerReference=(\d+)||videoId=(\d+)/i
videoId=(\S+)\)
因此,最好使用\d,因为您要查找的是数字:
uniquePlayerReference=(\d+)
videoId=(\d+)
如果ID不仅仅是数字,那么您可以使用
[^ |]
而不是\S
,即
(?<=uniquePlayerReference=)[^|]*
(?如果ID不仅仅是数字,那么您可以使用[^ |]
而不是\S
,即
(?<=uniquePlayerReference=)[^|]*
(?这是一个很好的回答,也很有效,但是在我追求精通的过程中,任何人都能找到一个与| |相匹配的解决方案吗?不管这些值是什么?(当然,除非有一个双重教皇):-)这将不起作用,*
是贪婪匹配,将非常愉快地读取字符串的其余部分。您需要将*
替换为*?
以使其不贪婪,然后在遇到下一个字符时停止,
(不需要转义)@Lazarus:你说得对。我很快就编辑了我的解决方案。我把它改回了以前的样子。不,留下你的解决方案……编辑它;)这仍然是个好答案。@Lazarus:根据你的建议更改了我的解决方案:-)这是一个很好的回答,很有效,然而,在我寻求精通的过程中,任何人都能找到一个与| | |匹配的解决方案,无论其值是什么?(当然,除非里面有一个双教皇):-)这行不通,*
是一个贪婪的匹配,它会非常愉快地读取字符串的其余部分。您需要将*
替换为*?
以使其不贪婪,然后当它遇到下一个字符|
(不需要转义)时,它将停止。@Lazarus:您是对的。我的解决方案编辑得太快了。我把它改回原来的样子了。不,留下你的解决方案。。。只需编辑它;)这仍然是一个很好的答案。@Lazarus:根据你的建议更改了我的解决方案:-)这是一个非常好的回答,我知道你做了什么,它说匹配任意数量的字符直到它不匹配的地方=|,天才@与其说是天才,不如说是没有完整规格的合理解决方案。如果ID总是数字,那么@annakata下面的解决方案就更优雅了。哈哈,好吧,伙计,它们并不总是数字,所以在这种情况下,我会使用你的答案,尽管我已经将它们标记为有用的,因为它们都教给了我一些我不知道的东西!这是一个非常好的回答,我知道你做了什么,它说匹配任意数量的字符直到它不匹配的地方=|,天才@与其说是天才,不如说是没有完整规格的合理解决方案。如果ID总是数字,那么@annakata下面的解决方案就更优雅了。哈哈,好吧,伙计,它们并不总是数字,所以在这种情况下,我会使用你的答案,尽管我已经将它们标记为有用的,因为它们都教给了我一些我不知道的东西!