1. 程式人生 > >[例項]UWP之正則獲取文字中的超連結到剪下板並貼上

[例項]UWP之正則獲取文字中的超連結到剪下板並貼上

MainPage.xaml中

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock  Height="200" TextWrapping="Wrap"  Loaded="TextBlock_Loaded" Tapped="TextBlock_Tapped">
            dsdsdsdsadsadddsdsdsdhttp://www.baidu.com dsadsadsadsahttps://www.baidu.com1 daewqewqeqwewqdaewq
            dsdsdsdsadsadddsdsdsdhttp://www.baidu.com6 dsadsadsadsahttps://www.baidu.com2 daewqewqeqwewqdaewq
            dsdsdsdsadsadddsdsdsdhttp://www.baidu.com7 dsadsadsadsahttps://www.baidu.com3 daewqewqeqwewqdaewq
            dsdsdsdsadsadddsdsdsdhttp://www.baidu.com8 dsadsadsadsahttps://www.baidu.com4 daewqewqeqwewqdaewq
            dsdsdsdsadsadddsdsdsdhttp://www.baidu.com9 dsadsadsadsahttps://www.baidu.com5 daewqewqeqwewqdaewq
            <FlyoutBase.AttachedFlyout>
                <Flyout x:Name="HyperText" Placement="Full">
                    <StackPanel>
                        <ListView Name="ttt" SelectionChanged="ttt_SelectionChanged"/>
                    </StackPanel>
                </Flyout>
            </FlyoutBase.AttachedFlyout>
        </TextBlock>

        <StackPanel Orientation="Horizontal">
            <Button Content="貼上超連結" Click="Button_Click" />
            <TextBox  Name="hhh"/>
        </StackPanel>
        

    </StackPanel>

MainPage.cs中

using System.Text.RegularExpressions;
using Windows.ApplicationModel.DataTransfer;        
   private void TextBlock_Loaded(object sender, RoutedEventArgs e)
        {
            string str = ((TextBlock)sender).Text.ToString().ToLower();
            string pattern = @"https?://[^\s]+\s";
            MatchCollection mc = Regex.Matches(str, pattern);

            if(mc.Count > 0)
            {
                ttt.Items.Clear();
                foreach (Match t in mc)
                {
                    ttt.Items.Add(t.Value.ToString().Trim());
                }
            }

        }



        private void ttt_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var ddd = (ListView)sender;
            DataPackage dp = new DataPackage();
            dp.SetText(ddd.SelectedItem.ToString());
            Clipboard.SetContent(dp);
            HyperText.Hide();
        }

        private void TextBlock_Tapped(object sender, TappedRoutedEventArgs e)
        {
            var fff = (TextBlock)sender;
            FlyoutBase.ShowAttachedFlyout(fff);
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            DataPackageView con = Clipboard.GetContent();
            
            if (con.Contains(StandardDataFormats.Text))
            {
                hhh.Text = await con.GetTextAsync();
            }
        }


實現的效果如下: