我有这些可能的比赛
import pandas as pd
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=SERVER\DEV;'
'Database=Clusteranalysis;'
'Trusted_Connection=yes;')
cursor = conn.cursor()
query = 'SELECT * FROM [Clusteranalysis].[dbo].[Data] WHERE Rc=0'
result_port_map = pd.read_sql(query, conn)
print(result_port_map.head(5))
最后3个有效,但我想使用preg_match_all排除的第一个
当前
我有这个正则表达式,其中包括所有四个,第一个正则表达式匹配
https://www.facebook.com/tr?id=13046212397316299911&ev=pageview&noscript=1
https://www.facebook.com/pages/something
https://www.facebook.com/groups/something/
https://www.facebook.com/something
... random other non-facebook links
但是我想完全排除它
这是我当前的正则表达式
https://www.facebook.com/tr
另外,当它匹配时,$ matches在[0]和[1]和[2]中都包含一些东西,我不知道为什么会这样。我只想要一场比赛或没有一场比赛
请帮忙吗?
$pattern = "/(?:(?:http|https):\/\/|)(?:www\.|)facebook\.[a-z.]+\/((pages|groups)\/|)[a-zA-Z0-9\-_]{1,}/"
答案 0 :(得分:1)
在模式中,您使用2个交替,其中最后一个|
之后没有任何值。 http或https部分可以缩短为https吗?并且包括www.
的那部分不必位于非捕获组(?:
中。
您可以将正斜杠移到组中以匹配页面或组,并使用问号使该组为可选。然后在末尾匹配一个可选的正斜杠。
如果使用其他定界符,则/
(例如~
)不必转义正斜杠。
您的正则表达式可能如下:
^https://www\.facebook\.[a-z.]+/(?:pages/|groups/)?[\w-]+/?$
例如:
$pattern = '~^https://www\.facebook\.[a-z.]+/(?:pages/|groups/)?[\w-]+/?$~';
如果您想匹配更多而不是查询字符串参数,则可以使用否定的字符类[^?\s]+
来匹配1+而不是问号或空格字符。
^https://www\.facebook\.[a-z.]+/(?:pages/|groups/)?[^?\s]+$