我有很长的域名列表,其子域名如下:
ffmpeg version N-82597-gd316b21 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
libavutil 55. 40.100 / 55. 40.100
libavcodec 57. 66.106 / 57. 66.106
libavformat 57. 58.100 / 57. 58.100
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 67.100 / 6. 67.100
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
[adp @ 0000000000026380] Format adp detected only with low score of 25, misdetection possible!
Input #0, adp, from 'input.MTS':
Duration: 00:05:38.69, start: 0.000000, bitrate: 438 kb/s
Stream #0:0: Audio: adpcm_dtk, 48000 Hz, stereo, s16p
Output #0, mp4, to 'output.mp4':
Metadata:
encoder : Lavf57.58.100
Stream #0:0: Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc57.66.106 aac
Stream mapping:
Stream #0:0 -> #0:0 (adpcm_dtk (native) -> aac (native))
Press [q] to stop, [?] for help
size= 312kB time=00:05:38.68 bitrate= 7.6kbits/s speed=33.7x
video:0kB audio:250kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 25.134468%
[aac @ 00000000025c5ba0] Qavg: 65531.879
每个条目的0和几个子域之间(例如www.random.com
abc.api.random.co.uk
abc.def.api.random.ac.za
something.edu
another.random.net
random.pharmacy
)。我试图弄清楚如何只提取域名和TLD。例如,鉴于上述输出,我正在寻找:
abc.def.api.random.ac.za
这有点超出了我目前对正则表达式的理解。看来我们需要检查一下:
random.com
random.co.uk
random.ac.za
something.edu
random.net
random.pharmacy
).pharmacy
,co
等。(我非常确定列表中的二级域名都不超过2个字符 - alternatively could build an explicit list of optional second-level domains to be more accurate )答案 0 :(得分:0)
你需要的正则表达式是:
\w+(?:\.\w\w)?\.\w+$
是:
\w+
表示一个或多个字母或数字(?:\.\w\w)?
是一个可选组,匹配句点后跟两个字母\.\w+
匹配句点和剩余字母$
是该行的结尾请参阅demo。
如果你想减少通用性:
\w+(?:\.(?:co|ac))?\.\w+$
如果您想更加精确,则需要指定具有句点的整个eTLD(有效的顶级域名):
\w+(?:\.(?:co\.uk|ac\.za)|\.\w+)$
请参阅demo。
如果您想了解所有有效的顶级域名,Mozilla基金会有一个名为Public Suffix List的精美目录。
答案 1 :(得分:0)
再多一点思考。
您可以使用*(零或更多)和+(一个或多个)重复,但您也可以指定范围{x,y}(x或更多,但不超过y)。
这可能很有用,因为倒数第二个域很可能是你的tld的一部分,如果它只有2个字符长。
你肯定想使用$(行尾)标记作为horcrux指出,因为你将从右侧工作。
\ W +。(\ W {2}。)?\ W + $
(...)?表示捕获组中的任何内容都是可选的。所以它正在寻找精确的2个字母后跟一个小数,作为一个可选的中间条目。