chaturanga

Рейтинг
121
Регистрация
22.08.2012
Sly32 #:

я уже писал - сплиты не подходят, нужно вычленить только регуляркой. Мой вариант работает, но искал еще варианты

Здесь и вычленяется регуляркой, сплитится уже вычленение.

Из этого вычленения также можно всё достать второй регуляркой вместо сплита. Но одной сделать не получится - текст слишком "неоднородный".

Ну или если мы гарантированно знаем, что "префикс" строки содержит "location.*:", то делать а-ля https://regex101.com/r/LCOGoA/1

Но сплитить группу всё-равно придётся. На условном php

$str = "This role may also be located in our Playa Vista, CA campus.Note: By applying to this position you will have an opportunity to share your preferred working location from the following: Mountain View, CA, USA; Atlanta, GA, USA; Boulder, CO, USA; Chicago, IL, USA; New York, NY, USA; Los Angeles, CA, USA; San Francisco, CA, USA; Washington D.C., DC, USA.
This role may also be located in our Playa Vista, CA campus.Note: Google’s hybrid workplace includes remote and in-office roles. By applying to this position you will have an opportunity to share your preferred working location from the following:In-office locations: San Francisco, CA, USA; Boulder, CO, USA; Los Angeles, CA, USA.Remote location(s): California, USA; Colorado, USA.
Please submit your resume in English - we can only consider applications submitted in this language.
Note: Google’s hybrid workplace includes remote roles
Remote location: Brazil.";
$pattern = "/(location.*?:)([a-zA-Z ,;\.]*)([\.;])/";
$split = array();
if(preg_match_all($pattern, $str, $matches))
  foreach($matches[2] as $val)
    $split = array_merge($split, explode(";", $val));

  print_r($split);
VadimGen #:

не ясно выразился.

в исходниках:

Please submit your resume in English - we can only consider applications submitted in this language.

Note: Google’s hybrid workplace includes remote roles

Remote location: Brazil.

А, обсуждение не читал :)

Тогда без шансов, только по словарю.

VadimGen #:

USA ни везде есть))

185-207Mountain View, CA, USA
209-225Atlanta, GA, USA
227-243Boulder, CO, USA
245-261Chicago, IL, USA
263-280New York, NY, USA
282-302Los Angeles, CA, USA
304-326San Francisco, CA, USA
328-352Washington D.C., DC, USA
622-644San Francisco, CA, USA
646-662Boulder, CO, USA
664-684Los Angeles, CA, USA
705-720California, USA
722-735Colorado, USA


где нет?

Sly32 :

на выходе должно быть так:

Mountain View, CA, USA;  Atlanta, GA, USA;  Boulder, CO, USA;  Chicago, IL, USA;  New York, NY, USA;  Los Angeles, CA, USA;  San Francisco, CA, USA;  Washington D.C., DC, USA; 

San Francisco, CA, USA;  Boulder, CO, USA;  Los Angeles, CA, USA; California, USA; Colorado, USA

https://regex101.com/r/mbL8FS/1

LEOnidUKG #:

чем вас sqlite с индексом не устроил не понятно, уже бы запустили и всё работало. Если надо просто поместите бд файл в память и всё будет работать еще быстрее.

B-Tree и при этом хранить в памяти?

Тогда уж redis.

Shelton724 #:

Ну (раз уж id известные и просто числовые) тогда сделайте не один файл, а (например) 1000. По принципу в первом с id от 0 до 1000, во втором от 1001 до 2000 и т.п. Ну и обращаться к нужному в зависимости от диапазона.

И вот мы начали создавать собственный unordered_map/hashtable :)

lutskboy #:

php память так забьется

JSON в вашем случае вполне приемлемый вариант. Просто вы не умеете его готовить. Вкусный рецепт здесь.

lutskboy #:

json нет. файл будет 50-100мб. нужно именно искать в бинарном файле. 

    if ( strlen($data) == 2 )
    {
        $int    = unpack( 'cid/ccount', $data );
        $name   = unpack( 'a*', fread( $handle, $int['count'] ) );
        $persons[] = array( $int['id'], $name );
    }

Это и есть ваш поиск,  просто добавьте в него 

if ($int['id'] == SEARCH_ID ) {...}

но делать так (я об алгоритме в целом) разумеется не надо. Здесь у вас реализован обычный линейный поиск O(n), то есть, по сути - это худшее решение из всех возможных.

chewey #:

я вот до сих пор не понимаю почему коннект проходит на порт? 

Потому что соединение можно повесить и на 80/443 порт и замаскировать трафик под http(s).

Поэтому сначала трафик анализируется на наличие неких ключевых признаков, а потом скорость его обмена режется до нулевых значений. Нынешние версии GFW умеют ловить даже SS-rust +  Obfs4.

Да там есть 0.5-1% ложноположительных сработок, но кого они волнуют? Делается, кстати, очень примитивным способом.

We worked with other researchers to discover that the current GFW utilizes a number of different rules to identify fully encrypted protocols like Shadowsocks, VMesss, and Obfs4. One of these rules takes advantage of the fact that the ratio of 0 bit to 1 bit in these encrypted flows is close to 1:1. 

Поэтому теперь разработчики добавили случайное количество 0/1 и пока обходят блокировку. Вопрос всё тот же "надолго ли"?

Всего: 349