C#正则表达式。或者在后面看条件

时间:2016-05-19 13:50:29

标签: c# regex

我的文字里面有一些网址。可以有3种类型的网址

    没有协议的
  1. 例如:www.website-link.ch
  2. 使用http。例如:http://www.website-link.ch
  3. 使用https Ex:https:// www.website-link.ch
  4. 我需要从所有网址获取地址部分(例如:website-link.ch)。对于它我需要一个正则表达式,如果某些东西以'www'开头,那么它将具有正面的外观。 与'http:// www。' 与'https:// www。'

    是否可以将OR条件置于正向后方?对我来说它没有用,我只创造了这个怪物。

    string pattern = @"((?<=http://www\.).*\b)|((?<=https://www\.).*\b)|((?<=www\.).*\b)"; 
    

    是否可以使模式更智能?

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以通过简单地使用协议和“www”来避免使用lookbehind。部分属于非捕获组。

var regex = new Regex(@"(?:(?:https?://)?www\.)(.*\b)");

Regular expression visualization

Debuggex Demo

由于所有其他组都使用非捕获(.*\b)语法,因此只会捕获(?:)匹配的文本。

然后可以通过查看捕获的匹配组来访问网站地址的主机名(不带“www。”):

var hostnameMatch = regex.Match("http://www.website-link.ch").Groups[1];
if (hostnameMatch.Success)
    Console.WriteLine("Matched: {0}", hostnameMatch.Value); // Outputs "Matched: website-link.ch"

MSDN在每个匹配组的可用属性上有一些more information

答案 1 :(得分:1)

您还可以使用具有内置功能的class App extends React.Component { constructor() { super(); this.state = { author: '' }; this.change = this.change.bind(this); // set this for change method } change(e) { this.setState({ author: e.target.value }); } render() { return <input onChange={ this.change } value={ this.state.author } /> } } 类来解析字符串并分离部分。

例如:

System.UriBuilder